{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 608,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import patsy as pt\n",
    "from mpl_toolkits.mplot3d import Axes3D\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "sns.set()\n",
    "\n",
    "from IPython.display import HTML\n",
    "import copy\n",
    "import warnings\n",
    "warnings.filterwarnings('ignore')\n",
    "\n",
    "from sklearn import tree\n",
    "import graphviz \n",
    "from sklearn import metrics\n",
    "from sklearn.metrics import confusion_matrix\n",
    "from sklearn import datasets\n",
    "from sklearn.model_selection import cross_val_score\n",
    "from sklearn.ensemble import RandomForestRegressor\n",
    "from sklearn.ensemble import GradientBoostingRegressor\n",
    "from sklearn.linear_model import Lasso"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 8.3.1 Fitting Classification Trees"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 609,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sales</th>\n",
       "      <th>CompPrice</th>\n",
       "      <th>Income</th>\n",
       "      <th>Advertising</th>\n",
       "      <th>Population</th>\n",
       "      <th>Price</th>\n",
       "      <th>ShelveLoc</th>\n",
       "      <th>Age</th>\n",
       "      <th>Education</th>\n",
       "      <th>Urban</th>\n",
       "      <th>US</th>\n",
       "      <th>High</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>9.50</td>\n",
       "      <td>138</td>\n",
       "      <td>73</td>\n",
       "      <td>11</td>\n",
       "      <td>276</td>\n",
       "      <td>120</td>\n",
       "      <td>Bad</td>\n",
       "      <td>42</td>\n",
       "      <td>17</td>\n",
       "      <td>Yes</td>\n",
       "      <td>Yes</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>11.22</td>\n",
       "      <td>111</td>\n",
       "      <td>48</td>\n",
       "      <td>16</td>\n",
       "      <td>260</td>\n",
       "      <td>83</td>\n",
       "      <td>Good</td>\n",
       "      <td>65</td>\n",
       "      <td>10</td>\n",
       "      <td>Yes</td>\n",
       "      <td>Yes</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>10.06</td>\n",
       "      <td>113</td>\n",
       "      <td>35</td>\n",
       "      <td>10</td>\n",
       "      <td>269</td>\n",
       "      <td>80</td>\n",
       "      <td>Medium</td>\n",
       "      <td>59</td>\n",
       "      <td>12</td>\n",
       "      <td>Yes</td>\n",
       "      <td>Yes</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>7.40</td>\n",
       "      <td>117</td>\n",
       "      <td>100</td>\n",
       "      <td>4</td>\n",
       "      <td>466</td>\n",
       "      <td>97</td>\n",
       "      <td>Medium</td>\n",
       "      <td>55</td>\n",
       "      <td>14</td>\n",
       "      <td>Yes</td>\n",
       "      <td>Yes</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4.15</td>\n",
       "      <td>141</td>\n",
       "      <td>64</td>\n",
       "      <td>3</td>\n",
       "      <td>340</td>\n",
       "      <td>128</td>\n",
       "      <td>Bad</td>\n",
       "      <td>38</td>\n",
       "      <td>13</td>\n",
       "      <td>Yes</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Sales  CompPrice  Income  Advertising  Population  Price ShelveLoc  Age  \\\n",
       "0   9.50        138      73           11         276    120       Bad   42   \n",
       "1  11.22        111      48           16         260     83      Good   65   \n",
       "2  10.06        113      35           10         269     80    Medium   59   \n",
       "3   7.40        117     100            4         466     97    Medium   55   \n",
       "4   4.15        141      64            3         340    128       Bad   38   \n",
       "\n",
       "   Education Urban   US  High  \n",
       "0         17   Yes  Yes   1.0  \n",
       "1         10   Yes  Yes   1.0  \n",
       "2         12   Yes  Yes   1.0  \n",
       "3         14   Yes  Yes   0.0  \n",
       "4         13   Yes   No   0.0  "
      ]
     },
     "execution_count": 609,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "carseats_df = pd.read_csv('./data/Carseats.csv')\n",
    "\n",
    "# Check for missing values\n",
    "assert carseats_df.isnull().sum().sum() == 0\n",
    "# Drop unused index\n",
    "carseats_df = carseats_df.drop('Unnamed: 0', axis=1)\n",
    "\n",
    "\n",
    "# Create binary variable High 1 if Sales > 8\n",
    "carseats_df['High'] = (carseats_df['Sales'] > 8).astype(np.float64)\n",
    "\n",
    "# Create index for training set\n",
    "np.random.seed(1)\n",
    "train = np.random.random(len(carseats_df)) > 0.5\n",
    "\n",
    "\n",
    "carseats_df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We now use the tree() function to fit a classification tree in order to predict High using all variables but Sales."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 620,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n",
       " -->\n",
       "<!-- Title: Tree Pages: 1 -->\n",
       "<svg width=\"1388pt\" height=\"552pt\"\n",
       " viewBox=\"0.00 0.00 1388.00 552.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 548)\">\n",
       "<title>Tree</title>\n",
       "<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-548 1384,-548 1384,4 -4,4\"/>\n",
       "<!-- 0 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>0</title>\n",
       "<path fill=\"#e58139\" fill-opacity=\"0.305882\" stroke=\"#000000\" d=\"M834.5,-544C834.5,-544 728.5,-544 728.5,-544 722.5,-544 716.5,-538 716.5,-532 716.5,-532 716.5,-473 716.5,-473 716.5,-467 722.5,-461 728.5,-461 728.5,-461 834.5,-461 834.5,-461 840.5,-461 846.5,-467 846.5,-473 846.5,-473 846.5,-532 846.5,-532 846.5,-538 840.5,-544 834.5,-544\"/>\n",
       "<text text-anchor=\"middle\" x=\"781.5\" y=\"-528.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">ShelveLoc[Good] &lt;= 0.5</text>\n",
       "<text text-anchor=\"middle\" x=\"781.5\" y=\"-513.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.484</text>\n",
       "<text text-anchor=\"middle\" x=\"781.5\" y=\"-498.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 400</text>\n",
       "<text text-anchor=\"middle\" x=\"781.5\" y=\"-483.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [236, 164]</text>\n",
       "<text text-anchor=\"middle\" x=\"781.5\" y=\"-468.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Low</text>\n",
       "</g>\n",
       "<!-- 1 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>1</title>\n",
       "<path fill=\"#e58139\" fill-opacity=\"0.549020\" stroke=\"#000000\" d=\"M624.5,-425C624.5,-425 554.5,-425 554.5,-425 548.5,-425 542.5,-419 542.5,-413 542.5,-413 542.5,-354 542.5,-354 542.5,-348 548.5,-342 554.5,-342 554.5,-342 624.5,-342 624.5,-342 630.5,-342 636.5,-348 636.5,-354 636.5,-354 636.5,-413 636.5,-413 636.5,-419 630.5,-425 624.5,-425\"/>\n",
       "<text text-anchor=\"middle\" x=\"589.5\" y=\"-409.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">Price &lt;= 92.5</text>\n",
       "<text text-anchor=\"middle\" x=\"589.5\" y=\"-394.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.429</text>\n",
       "<text text-anchor=\"middle\" x=\"589.5\" y=\"-379.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 315</text>\n",
       "<text text-anchor=\"middle\" x=\"589.5\" y=\"-364.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [217, 98]</text>\n",
       "<text text-anchor=\"middle\" x=\"589.5\" y=\"-349.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Low</text>\n",
       "</g>\n",
       "<!-- 0&#45;&gt;1 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>0&#45;&gt;1</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M716.4976,-462.212C693.3516,-447.8663 667.5125,-431.8515 645.2152,-418.0318\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"646.8813,-414.9467 636.5376,-412.6535 643.1936,-420.8966 646.8813,-414.9467\"/>\n",
       "<text text-anchor=\"middle\" x=\"642.2505\" y=\"-433.292\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">True</text>\n",
       "</g>\n",
       "<!-- 16 -->\n",
       "<g id=\"node17\" class=\"node\">\n",
       "<title>16</title>\n",
       "<path fill=\"#399de5\" fill-opacity=\"0.713725\" stroke=\"#000000\" d=\"M1015,-425C1015,-425 950,-425 950,-425 944,-425 938,-419 938,-413 938,-413 938,-354 938,-354 938,-348 944,-342 950,-342 950,-342 1015,-342 1015,-342 1021,-342 1027,-348 1027,-354 1027,-354 1027,-413 1027,-413 1027,-419 1021,-425 1015,-425\"/>\n",
       "<text text-anchor=\"middle\" x=\"982.5\" y=\"-409.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">Price &lt;= 142.5</text>\n",
       "<text text-anchor=\"middle\" x=\"982.5\" y=\"-394.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.347</text>\n",
       "<text text-anchor=\"middle\" x=\"982.5\" y=\"-379.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 85</text>\n",
       "<text text-anchor=\"middle\" x=\"982.5\" y=\"-364.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [19, 66]</text>\n",
       "<text text-anchor=\"middle\" x=\"982.5\" y=\"-349.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = High</text>\n",
       "</g>\n",
       "<!-- 0&#45;&gt;16 -->\n",
       "<g id=\"edge16\" class=\"edge\">\n",
       "<title>0&#45;&gt;16</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M846.7589,-463.8641C873.4194,-448.08 903.8684,-430.053 929.1626,-415.0778\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"931.058,-418.0232 937.8799,-409.9169 927.4918,-411.9997 931.058,-418.0232\"/>\n",
       "<text text-anchor=\"middle\" x=\"931.6741\" y=\"-430.4344\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">False</text>\n",
       "</g>\n",
       "<!-- 2 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>2</title>\n",
       "<path fill=\"#399de5\" fill-opacity=\"0.560784\" stroke=\"#000000\" d=\"M338,-306C338,-306 273,-306 273,-306 267,-306 261,-300 261,-294 261,-294 261,-235 261,-235 261,-229 267,-223 273,-223 273,-223 338,-223 338,-223 344,-223 350,-229 350,-235 350,-235 350,-294 350,-294 350,-300 344,-306 338,-306\"/>\n",
       "<text text-anchor=\"middle\" x=\"305.5\" y=\"-290.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">Income &lt;= 57.0</text>\n",
       "<text text-anchor=\"middle\" x=\"305.5\" y=\"-275.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.423</text>\n",
       "<text text-anchor=\"middle\" x=\"305.5\" y=\"-260.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 46</text>\n",
       "<text text-anchor=\"middle\" x=\"305.5\" y=\"-245.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [14, 32]</text>\n",
       "<text text-anchor=\"middle\" x=\"305.5\" y=\"-230.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = High</text>\n",
       "</g>\n",
       "<!-- 1&#45;&gt;2 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>1&#45;&gt;2</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M542.2844,-363.716C491.9477,-342.6242 412.3666,-309.2786 359.5548,-287.1497\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"360.594,-283.7904 350.0183,-283.1538 357.8887,-290.2465 360.594,-283.7904\"/>\n",
       "</g>\n",
       "<!-- 9 -->\n",
       "<g id=\"node10\" class=\"node\">\n",
       "<title>9</title>\n",
       "<path fill=\"#e58139\" fill-opacity=\"0.674510\" stroke=\"#000000\" d=\"M631,-306C631,-306 548,-306 548,-306 542,-306 536,-300 536,-294 536,-294 536,-235 536,-235 536,-229 542,-223 548,-223 548,-223 631,-223 631,-223 637,-223 643,-229 643,-235 643,-235 643,-294 643,-294 643,-300 637,-306 631,-306\"/>\n",
       "<text text-anchor=\"middle\" x=\"589.5\" y=\"-290.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">Advertising &lt;= 13.5</text>\n",
       "<text text-anchor=\"middle\" x=\"589.5\" y=\"-275.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.37</text>\n",
       "<text text-anchor=\"middle\" x=\"589.5\" y=\"-260.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 269</text>\n",
       "<text text-anchor=\"middle\" x=\"589.5\" y=\"-245.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [203, 66]</text>\n",
       "<text text-anchor=\"middle\" x=\"589.5\" y=\"-230.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Low</text>\n",
       "</g>\n",
       "<!-- 1&#45;&gt;9 -->\n",
       "<g id=\"edge9\" class=\"edge\">\n",
       "<title>1&#45;&gt;9</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M589.5,-341.8796C589.5,-333.6838 589.5,-324.9891 589.5,-316.5013\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"593.0001,-316.298 589.5,-306.2981 586.0001,-316.2981 593.0001,-316.298\"/>\n",
       "</g>\n",
       "<!-- 3 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>3</title>\n",
       "<path fill=\"#e58139\" fill-opacity=\"0.572549\" stroke=\"#000000\" d=\"M192,-187C192,-187 75,-187 75,-187 69,-187 63,-181 63,-175 63,-175 63,-116 63,-116 63,-110 69,-104 75,-104 75,-104 192,-104 192,-104 198,-104 204,-110 204,-116 204,-116 204,-175 204,-175 204,-181 198,-187 192,-187\"/>\n",
       "<text text-anchor=\"middle\" x=\"133.5\" y=\"-171.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">ShelveLoc[Medium] &lt;= 0.5</text>\n",
       "<text text-anchor=\"middle\" x=\"133.5\" y=\"-156.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.42</text>\n",
       "<text text-anchor=\"middle\" x=\"133.5\" y=\"-141.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 10</text>\n",
       "<text text-anchor=\"middle\" x=\"133.5\" y=\"-126.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [7, 3]</text>\n",
       "<text text-anchor=\"middle\" x=\"133.5\" y=\"-111.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Low</text>\n",
       "</g>\n",
       "<!-- 2&#45;&gt;3 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>2&#45;&gt;3</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M260.758,-233.5448C242.8165,-221.1318 221.7353,-206.5465 201.9488,-192.857\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"203.7761,-189.8652 193.561,-187.0538 199.7933,-195.6218 203.7761,-189.8652\"/>\n",
       "</g>\n",
       "<!-- 6 -->\n",
       "<g id=\"node7\" class=\"node\">\n",
       "<title>6</title>\n",
       "<path fill=\"#399de5\" fill-opacity=\"0.756863\" stroke=\"#000000\" d=\"M348.5,-187C348.5,-187 262.5,-187 262.5,-187 256.5,-187 250.5,-181 250.5,-175 250.5,-175 250.5,-116 250.5,-116 250.5,-110 256.5,-104 262.5,-104 262.5,-104 348.5,-104 348.5,-104 354.5,-104 360.5,-110 360.5,-116 360.5,-116 360.5,-175 360.5,-175 360.5,-181 354.5,-187 348.5,-187\"/>\n",
       "<text text-anchor=\"middle\" x=\"305.5\" y=\"-171.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">Population &lt;= 207.5</text>\n",
       "<text text-anchor=\"middle\" x=\"305.5\" y=\"-156.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.313</text>\n",
       "<text text-anchor=\"middle\" x=\"305.5\" y=\"-141.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 36</text>\n",
       "<text text-anchor=\"middle\" x=\"305.5\" y=\"-126.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [7, 29]</text>\n",
       "<text text-anchor=\"middle\" x=\"305.5\" y=\"-111.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = High</text>\n",
       "</g>\n",
       "<!-- 2&#45;&gt;6 -->\n",
       "<g id=\"edge6\" class=\"edge\">\n",
       "<title>2&#45;&gt;6</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M305.5,-222.8796C305.5,-214.6838 305.5,-205.9891 305.5,-197.5013\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"309.0001,-197.298 305.5,-187.2981 302.0001,-197.2981 309.0001,-197.298\"/>\n",
       "</g>\n",
       "<!-- 4 -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>4</title>\n",
       "<path fill=\"#e58139\" stroke=\"#000000\" d=\"M65,-68C65,-68 12,-68 12,-68 6,-68 0,-62 0,-56 0,-56 0,-12 0,-12 0,-6 6,0 12,0 12,0 65,0 65,0 71,0 77,-6 77,-12 77,-12 77,-56 77,-56 77,-62 71,-68 65,-68\"/>\n",
       "<text text-anchor=\"middle\" x=\"38.5\" y=\"-52.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.0</text>\n",
       "<text text-anchor=\"middle\" x=\"38.5\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 7</text>\n",
       "<text text-anchor=\"middle\" x=\"38.5\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [7, 0]</text>\n",
       "<text text-anchor=\"middle\" x=\"38.5\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Low</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;4 -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>3&#45;&gt;4</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M98.1255,-103.9815C90.3732,-94.8828 82.1591,-85.242 74.3869,-76.1199\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"76.8428,-73.6056 67.6933,-68.2637 71.5146,-78.1454 76.8428,-73.6056\"/>\n",
       "</g>\n",
       "<!-- 5 -->\n",
       "<g id=\"node6\" class=\"node\">\n",
       "<title>5</title>\n",
       "<path fill=\"#399de5\" stroke=\"#000000\" d=\"M160,-68C160,-68 107,-68 107,-68 101,-68 95,-62 95,-56 95,-56 95,-12 95,-12 95,-6 101,0 107,0 107,0 160,0 160,0 166,0 172,-6 172,-12 172,-12 172,-56 172,-56 172,-62 166,-68 160,-68\"/>\n",
       "<text text-anchor=\"middle\" x=\"133.5\" y=\"-52.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.0</text>\n",
       "<text text-anchor=\"middle\" x=\"133.5\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 3</text>\n",
       "<text text-anchor=\"middle\" x=\"133.5\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [0, 3]</text>\n",
       "<text text-anchor=\"middle\" x=\"133.5\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = High</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;5 -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>3&#45;&gt;5</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M133.5,-103.9815C133.5,-95.618 133.5,-86.7965 133.5,-78.3409\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"137.0001,-78.2636 133.5,-68.2637 130.0001,-78.2637 137.0001,-78.2636\"/>\n",
       "</g>\n",
       "<!-- 7 -->\n",
       "<g id=\"node8\" class=\"node\">\n",
       "<title>7</title>\n",
       "<path fill=\"#399de5\" fill-opacity=\"0.400000\" stroke=\"#000000\" d=\"M261,-68C261,-68 202,-68 202,-68 196,-68 190,-62 190,-56 190,-56 190,-12 190,-12 190,-6 196,0 202,0 202,0 261,0 261,0 267,0 273,-6 273,-12 273,-12 273,-56 273,-56 273,-62 267,-68 261,-68\"/>\n",
       "<text text-anchor=\"middle\" x=\"231.5\" y=\"-52.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.469</text>\n",
       "<text text-anchor=\"middle\" x=\"231.5\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 16</text>\n",
       "<text text-anchor=\"middle\" x=\"231.5\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [6, 10]</text>\n",
       "<text text-anchor=\"middle\" x=\"231.5\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = High</text>\n",
       "</g>\n",
       "<!-- 6&#45;&gt;7 -->\n",
       "<g id=\"edge7\" class=\"edge\">\n",
       "<title>6&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M277.9451,-103.9815C272.0285,-95.0666 265.7665,-85.6313 259.8213,-76.6734\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"262.686,-74.6602 254.24,-68.2637 256.8536,-78.5311 262.686,-74.6602\"/>\n",
       "</g>\n",
       "<!-- 8 -->\n",
       "<g id=\"node9\" class=\"node\">\n",
       "<title>8</title>\n",
       "<path fill=\"#399de5\" fill-opacity=\"0.949020\" stroke=\"#000000\" d=\"M362,-68C362,-68 303,-68 303,-68 297,-68 291,-62 291,-56 291,-56 291,-12 291,-12 291,-6 297,0 303,0 303,0 362,0 362,0 368,0 374,-6 374,-12 374,-12 374,-56 374,-56 374,-62 368,-68 362,-68\"/>\n",
       "<text text-anchor=\"middle\" x=\"332.5\" y=\"-52.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.095</text>\n",
       "<text text-anchor=\"middle\" x=\"332.5\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 20</text>\n",
       "<text text-anchor=\"middle\" x=\"332.5\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [1, 19]</text>\n",
       "<text text-anchor=\"middle\" x=\"332.5\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = High</text>\n",
       "</g>\n",
       "<!-- 6&#45;&gt;8 -->\n",
       "<g id=\"edge8\" class=\"edge\">\n",
       "<title>6&#45;&gt;8</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M315.5538,-103.9815C317.6013,-95.5261 319.7621,-86.6026 321.8302,-78.0623\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"325.2511,-78.8065 324.203,-68.2637 318.4477,-77.159 325.2511,-78.8065\"/>\n",
       "</g>\n",
       "<!-- 10 -->\n",
       "<g id=\"node11\" class=\"node\">\n",
       "<title>10</title>\n",
       "<path fill=\"#e58139\" fill-opacity=\"0.776471\" stroke=\"#000000\" d=\"M575,-187C575,-187 486,-187 486,-187 480,-187 474,-181 474,-175 474,-175 474,-116 474,-116 474,-110 480,-104 486,-104 486,-104 575,-104 575,-104 581,-104 587,-110 587,-116 587,-116 587,-175 587,-175 587,-181 581,-187 575,-187\"/>\n",
       "<text text-anchor=\"middle\" x=\"530.5\" y=\"-171.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">CompPrice &lt;= 124.5</text>\n",
       "<text text-anchor=\"middle\" x=\"530.5\" y=\"-156.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.299</text>\n",
       "<text text-anchor=\"middle\" x=\"530.5\" y=\"-141.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 224</text>\n",
       "<text text-anchor=\"middle\" x=\"530.5\" y=\"-126.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [183, 41]</text>\n",
       "<text text-anchor=\"middle\" x=\"530.5\" y=\"-111.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Low</text>\n",
       "</g>\n",
       "<!-- 9&#45;&gt;10 -->\n",
       "<g id=\"edge10\" class=\"edge\">\n",
       "<title>9&#45;&gt;10</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M568.8647,-222.8796C564.6226,-214.3236 560.111,-205.2238 555.7279,-196.3833\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"558.8012,-194.7026 551.2234,-187.2981 552.5297,-197.8121 558.8012,-194.7026\"/>\n",
       "</g>\n",
       "<!-- 13 -->\n",
       "<g id=\"node14\" class=\"node\">\n",
       "<title>13</title>\n",
       "<path fill=\"#399de5\" fill-opacity=\"0.200000\" stroke=\"#000000\" d=\"M682,-187C682,-187 617,-187 617,-187 611,-187 605,-181 605,-175 605,-175 605,-116 605,-116 605,-110 611,-104 617,-104 617,-104 682,-104 682,-104 688,-104 694,-110 694,-116 694,-116 694,-175 694,-175 694,-181 688,-187 682,-187\"/>\n",
       "<text text-anchor=\"middle\" x=\"649.5\" y=\"-171.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">Age &lt;= 54.5</text>\n",
       "<text text-anchor=\"middle\" x=\"649.5\" y=\"-156.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.494</text>\n",
       "<text text-anchor=\"middle\" x=\"649.5\" y=\"-141.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 45</text>\n",
       "<text text-anchor=\"middle\" x=\"649.5\" y=\"-126.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [20, 25]</text>\n",
       "<text text-anchor=\"middle\" x=\"649.5\" y=\"-111.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = High</text>\n",
       "</g>\n",
       "<!-- 9&#45;&gt;13 -->\n",
       "<g id=\"edge13\" class=\"edge\">\n",
       "<title>9&#45;&gt;13</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M610.4851,-222.8796C614.799,-214.3236 619.3872,-205.2238 623.8446,-196.3833\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"627.0484,-197.8031 628.4253,-187.2981 620.7979,-194.6515 627.0484,-197.8031\"/>\n",
       "</g>\n",
       "<!-- 11 -->\n",
       "<g id=\"node12\" class=\"node\">\n",
       "<title>11</title>\n",
       "<path fill=\"#e58139\" fill-opacity=\"0.933333\" stroke=\"#000000\" d=\"M463,-68C463,-68 404,-68 404,-68 398,-68 392,-62 392,-56 392,-56 392,-12 392,-12 392,-6 398,0 404,0 404,0 463,0 463,0 469,0 475,-6 475,-12 475,-12 475,-56 475,-56 475,-62 469,-68 463,-68\"/>\n",
       "<text text-anchor=\"middle\" x=\"433.5\" y=\"-52.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.117</text>\n",
       "<text text-anchor=\"middle\" x=\"433.5\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 96</text>\n",
       "<text text-anchor=\"middle\" x=\"433.5\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [90, 6]</text>\n",
       "<text text-anchor=\"middle\" x=\"433.5\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Low</text>\n",
       "</g>\n",
       "<!-- 10&#45;&gt;11 -->\n",
       "<g id=\"edge11\" class=\"edge\">\n",
       "<title>10&#45;&gt;11</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M494.3808,-103.9815C486.3853,-94.7908 477.9087,-85.0472 469.9021,-75.8436\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"472.512,-73.5111 463.3079,-68.2637 467.2307,-78.1055 472.512,-73.5111\"/>\n",
       "</g>\n",
       "<!-- 12 -->\n",
       "<g id=\"node13\" class=\"node\">\n",
       "<title>12</title>\n",
       "<path fill=\"#e58139\" fill-opacity=\"0.623529\" stroke=\"#000000\" d=\"M570,-68C570,-68 505,-68 505,-68 499,-68 493,-62 493,-56 493,-56 493,-12 493,-12 493,-6 499,0 505,0 505,0 570,0 570,0 576,0 582,-6 582,-12 582,-12 582,-56 582,-56 582,-62 576,-68 570,-68\"/>\n",
       "<text text-anchor=\"middle\" x=\"537.5\" y=\"-52.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.397</text>\n",
       "<text text-anchor=\"middle\" x=\"537.5\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 128</text>\n",
       "<text text-anchor=\"middle\" x=\"537.5\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [93, 35]</text>\n",
       "<text text-anchor=\"middle\" x=\"537.5\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Low</text>\n",
       "</g>\n",
       "<!-- 10&#45;&gt;12 -->\n",
       "<g id=\"edge12\" class=\"edge\">\n",
       "<title>10&#45;&gt;12</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M533.1065,-103.9815C533.6316,-95.618 534.1854,-86.7965 534.7163,-78.3409\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"538.2154,-78.4634 535.3489,-68.2637 531.2291,-78.0247 538.2154,-78.4634\"/>\n",
       "</g>\n",
       "<!-- 14 -->\n",
       "<g id=\"node15\" class=\"node\">\n",
       "<title>14</title>\n",
       "<path fill=\"#399de5\" fill-opacity=\"0.749020\" stroke=\"#000000\" d=\"M671,-68C671,-68 612,-68 612,-68 606,-68 600,-62 600,-56 600,-56 600,-12 600,-12 600,-6 606,0 612,0 612,0 671,0 671,0 677,0 683,-6 683,-12 683,-12 683,-56 683,-56 683,-62 677,-68 671,-68\"/>\n",
       "<text text-anchor=\"middle\" x=\"641.5\" y=\"-52.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.32</text>\n",
       "<text text-anchor=\"middle\" x=\"641.5\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 25</text>\n",
       "<text text-anchor=\"middle\" x=\"641.5\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [5, 20]</text>\n",
       "<text text-anchor=\"middle\" x=\"641.5\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = High</text>\n",
       "</g>\n",
       "<!-- 13&#45;&gt;14 -->\n",
       "<g id=\"edge14\" class=\"edge\">\n",
       "<title>13&#45;&gt;14</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M646.5211,-103.9815C645.921,-95.618 645.2881,-86.7965 644.6814,-78.3409\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"648.1651,-77.9875 643.9584,-68.2637 641.1831,-78.4885 648.1651,-77.9875\"/>\n",
       "</g>\n",
       "<!-- 15 -->\n",
       "<g id=\"node16\" class=\"node\">\n",
       "<title>15</title>\n",
       "<path fill=\"#e58139\" fill-opacity=\"0.666667\" stroke=\"#000000\" d=\"M772,-68C772,-68 713,-68 713,-68 707,-68 701,-62 701,-56 701,-56 701,-12 701,-12 701,-6 707,0 713,0 713,0 772,0 772,0 778,0 784,-6 784,-12 784,-12 784,-56 784,-56 784,-62 778,-68 772,-68\"/>\n",
       "<text text-anchor=\"middle\" x=\"742.5\" y=\"-52.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.375</text>\n",
       "<text text-anchor=\"middle\" x=\"742.5\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 20</text>\n",
       "<text text-anchor=\"middle\" x=\"742.5\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [15, 5]</text>\n",
       "<text text-anchor=\"middle\" x=\"742.5\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Low</text>\n",
       "</g>\n",
       "<!-- 13&#45;&gt;15 -->\n",
       "<g id=\"edge15\" class=\"edge\">\n",
       "<title>13&#45;&gt;15</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M684.1298,-103.9815C691.7189,-94.8828 699.76,-85.242 707.3686,-76.1199\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"710.2039,-78.1849 713.9213,-68.2637 704.8283,-73.7012 710.2039,-78.1849\"/>\n",
       "</g>\n",
       "<!-- 17 -->\n",
       "<g id=\"node18\" class=\"node\">\n",
       "<title>17</title>\n",
       "<path fill=\"#399de5\" fill-opacity=\"0.843137\" stroke=\"#000000\" d=\"M1015,-306C1015,-306 950,-306 950,-306 944,-306 938,-300 938,-294 938,-294 938,-235 938,-235 938,-229 944,-223 950,-223 950,-223 1015,-223 1015,-223 1021,-223 1027,-229 1027,-235 1027,-235 1027,-294 1027,-294 1027,-300 1021,-306 1015,-306\"/>\n",
       "<text text-anchor=\"middle\" x=\"982.5\" y=\"-290.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">Income &lt;= 34.5</text>\n",
       "<text text-anchor=\"middle\" x=\"982.5\" y=\"-275.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.236</text>\n",
       "<text text-anchor=\"middle\" x=\"982.5\" y=\"-260.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 73</text>\n",
       "<text text-anchor=\"middle\" x=\"982.5\" y=\"-245.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [10, 63]</text>\n",
       "<text text-anchor=\"middle\" x=\"982.5\" y=\"-230.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = High</text>\n",
       "</g>\n",
       "<!-- 16&#45;&gt;17 -->\n",
       "<g id=\"edge17\" class=\"edge\">\n",
       "<title>16&#45;&gt;17</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M982.5,-341.8796C982.5,-333.6838 982.5,-324.9891 982.5,-316.5013\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"986.0001,-316.298 982.5,-306.2981 979.0001,-316.2981 986.0001,-316.298\"/>\n",
       "</g>\n",
       "<!-- 24 -->\n",
       "<g id=\"node25\" class=\"node\">\n",
       "<title>24</title>\n",
       "<path fill=\"#e58139\" fill-opacity=\"0.666667\" stroke=\"#000000\" d=\"M1268.5,-306C1268.5,-306 1190.5,-306 1190.5,-306 1184.5,-306 1178.5,-300 1178.5,-294 1178.5,-294 1178.5,-235 1178.5,-235 1178.5,-229 1184.5,-223 1190.5,-223 1190.5,-223 1268.5,-223 1268.5,-223 1274.5,-223 1280.5,-229 1280.5,-235 1280.5,-235 1280.5,-294 1280.5,-294 1280.5,-300 1274.5,-306 1268.5,-306\"/>\n",
       "<text text-anchor=\"middle\" x=\"1229.5\" y=\"-290.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">Education &lt;= 16.5</text>\n",
       "<text text-anchor=\"middle\" x=\"1229.5\" y=\"-275.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.375</text>\n",
       "<text text-anchor=\"middle\" x=\"1229.5\" y=\"-260.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 12</text>\n",
       "<text text-anchor=\"middle\" x=\"1229.5\" y=\"-245.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [9, 3]</text>\n",
       "<text text-anchor=\"middle\" x=\"1229.5\" y=\"-230.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Low</text>\n",
       "</g>\n",
       "<!-- 16&#45;&gt;24 -->\n",
       "<g id=\"edge24\" class=\"edge\">\n",
       "<title>16&#45;&gt;24</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M1027.2298,-361.95C1066.9452,-342.8159 1125.3132,-314.6952 1169.1542,-293.5735\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1170.7871,-296.6719 1178.2769,-289.1783 1167.7488,-290.3656 1170.7871,-296.6719\"/>\n",
       "</g>\n",
       "<!-- 18 -->\n",
       "<g id=\"node19\" class=\"node\">\n",
       "<title>18</title>\n",
       "<path fill=\"#399de5\" fill-opacity=\"0.141176\" stroke=\"#000000\" d=\"M959,-187C959,-187 898,-187 898,-187 892,-187 886,-181 886,-175 886,-175 886,-116 886,-116 886,-110 892,-104 898,-104 898,-104 959,-104 959,-104 965,-104 971,-110 971,-116 971,-116 971,-175 971,-175 971,-181 965,-187 959,-187\"/>\n",
       "<text text-anchor=\"middle\" x=\"928.5\" y=\"-171.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">Price &lt;= 109.5</text>\n",
       "<text text-anchor=\"middle\" x=\"928.5\" y=\"-156.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.497</text>\n",
       "<text text-anchor=\"middle\" x=\"928.5\" y=\"-141.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 13</text>\n",
       "<text text-anchor=\"middle\" x=\"928.5\" y=\"-126.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [6, 7]</text>\n",
       "<text text-anchor=\"middle\" x=\"928.5\" y=\"-111.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = High</text>\n",
       "</g>\n",
       "<!-- 17&#45;&gt;18 -->\n",
       "<g id=\"edge18\" class=\"edge\">\n",
       "<title>17&#45;&gt;18</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M963.6134,-222.8796C959.7717,-214.4136 955.6885,-205.4153 951.7166,-196.6626\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"954.7867,-194.9581 947.4672,-187.2981 948.4123,-197.8507 954.7867,-194.9581\"/>\n",
       "</g>\n",
       "<!-- 21 -->\n",
       "<g id=\"node22\" class=\"node\">\n",
       "<title>21</title>\n",
       "<path fill=\"#399de5\" fill-opacity=\"0.929412\" stroke=\"#000000\" d=\"M1074,-187C1074,-187 1001,-187 1001,-187 995,-187 989,-181 989,-175 989,-175 989,-116 989,-116 989,-110 995,-104 1001,-104 1001,-104 1074,-104 1074,-104 1080,-104 1086,-110 1086,-116 1086,-116 1086,-175 1086,-175 1086,-181 1080,-187 1074,-187\"/>\n",
       "<text text-anchor=\"middle\" x=\"1037.5\" y=\"-171.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">US[T.Yes] &lt;= 0.5</text>\n",
       "<text text-anchor=\"middle\" x=\"1037.5\" y=\"-156.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.124</text>\n",
       "<text text-anchor=\"middle\" x=\"1037.5\" y=\"-141.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 60</text>\n",
       "<text text-anchor=\"middle\" x=\"1037.5\" y=\"-126.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [4, 56]</text>\n",
       "<text text-anchor=\"middle\" x=\"1037.5\" y=\"-111.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = High</text>\n",
       "</g>\n",
       "<!-- 17&#45;&gt;21 -->\n",
       "<g id=\"edge21\" class=\"edge\">\n",
       "<title>17&#45;&gt;21</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M1001.7363,-222.8796C1005.6908,-214.3236 1009.8966,-205.2238 1013.9825,-196.3833\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1017.1632,-197.8439 1018.1816,-187.2981 1010.809,-194.907 1017.1632,-197.8439\"/>\n",
       "</g>\n",
       "<!-- 19 -->\n",
       "<g id=\"node20\" class=\"node\">\n",
       "<title>19</title>\n",
       "<path fill=\"#399de5\" stroke=\"#000000\" d=\"M867,-68C867,-68 814,-68 814,-68 808,-68 802,-62 802,-56 802,-56 802,-12 802,-12 802,-6 808,0 814,0 814,0 867,0 867,0 873,0 879,-6 879,-12 879,-12 879,-56 879,-56 879,-62 873,-68 867,-68\"/>\n",
       "<text text-anchor=\"middle\" x=\"840.5\" y=\"-52.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.0</text>\n",
       "<text text-anchor=\"middle\" x=\"840.5\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 6</text>\n",
       "<text text-anchor=\"middle\" x=\"840.5\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [0, 6]</text>\n",
       "<text text-anchor=\"middle\" x=\"840.5\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = High</text>\n",
       "</g>\n",
       "<!-- 18&#45;&gt;19 -->\n",
       "<g id=\"edge19\" class=\"edge\">\n",
       "<title>18&#45;&gt;19</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M895.732,-103.9815C888.551,-94.8828 880.9421,-85.242 873.7426,-76.1199\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"876.4849,-73.9451 867.5422,-68.2637 870.9901,-78.2818 876.4849,-73.9451\"/>\n",
       "</g>\n",
       "<!-- 20 -->\n",
       "<g id=\"node21\" class=\"node\">\n",
       "<title>20</title>\n",
       "<path fill=\"#e58139\" fill-opacity=\"0.831373\" stroke=\"#000000\" d=\"M962,-68C962,-68 909,-68 909,-68 903,-68 897,-62 897,-56 897,-56 897,-12 897,-12 897,-6 903,0 909,0 909,0 962,0 962,0 968,0 974,-6 974,-12 974,-12 974,-56 974,-56 974,-62 968,-68 962,-68\"/>\n",
       "<text text-anchor=\"middle\" x=\"935.5\" y=\"-52.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.245</text>\n",
       "<text text-anchor=\"middle\" x=\"935.5\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 7</text>\n",
       "<text text-anchor=\"middle\" x=\"935.5\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [6, 1]</text>\n",
       "<text text-anchor=\"middle\" x=\"935.5\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Low</text>\n",
       "</g>\n",
       "<!-- 18&#45;&gt;20 -->\n",
       "<g id=\"edge20\" class=\"edge\">\n",
       "<title>18&#45;&gt;20</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M931.1065,-103.9815C931.6316,-95.618 932.1854,-86.7965 932.7163,-78.3409\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"936.2154,-78.4634 933.3489,-68.2637 929.2291,-78.0247 936.2154,-78.4634\"/>\n",
       "</g>\n",
       "<!-- 22 -->\n",
       "<g id=\"node23\" class=\"node\">\n",
       "<title>22</title>\n",
       "<path fill=\"#399de5\" fill-opacity=\"0.623529\" stroke=\"#000000\" d=\"M1059,-68C1059,-68 1004,-68 1004,-68 998,-68 992,-62 992,-56 992,-56 992,-12 992,-12 992,-6 998,0 1004,0 1004,0 1059,0 1059,0 1065,0 1071,-6 1071,-12 1071,-12 1071,-56 1071,-56 1071,-62 1065,-68 1059,-68\"/>\n",
       "<text text-anchor=\"middle\" x=\"1031.5\" y=\"-52.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.397</text>\n",
       "<text text-anchor=\"middle\" x=\"1031.5\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 11</text>\n",
       "<text text-anchor=\"middle\" x=\"1031.5\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [3, 8]</text>\n",
       "<text text-anchor=\"middle\" x=\"1031.5\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = High</text>\n",
       "</g>\n",
       "<!-- 21&#45;&gt;22 -->\n",
       "<g id=\"edge22\" class=\"edge\">\n",
       "<title>21&#45;&gt;22</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M1035.2658,-103.9815C1034.8158,-95.618 1034.3411,-86.7965 1033.8861,-78.3409\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1037.3762,-78.0611 1033.3438,-68.2637 1030.3863,-78.4373 1037.3762,-78.0611\"/>\n",
       "</g>\n",
       "<!-- 23 -->\n",
       "<g id=\"node24\" class=\"node\">\n",
       "<title>23</title>\n",
       "<path fill=\"#399de5\" fill-opacity=\"0.980392\" stroke=\"#000000\" d=\"M1160,-68C1160,-68 1101,-68 1101,-68 1095,-68 1089,-62 1089,-56 1089,-56 1089,-12 1089,-12 1089,-6 1095,0 1101,0 1101,0 1160,0 1160,0 1166,0 1172,-6 1172,-12 1172,-12 1172,-56 1172,-56 1172,-62 1166,-68 1160,-68\"/>\n",
       "<text text-anchor=\"middle\" x=\"1130.5\" y=\"-52.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.04</text>\n",
       "<text text-anchor=\"middle\" x=\"1130.5\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 49</text>\n",
       "<text text-anchor=\"middle\" x=\"1130.5\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [1, 48]</text>\n",
       "<text text-anchor=\"middle\" x=\"1130.5\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = High</text>\n",
       "</g>\n",
       "<!-- 21&#45;&gt;23 -->\n",
       "<g id=\"edge23\" class=\"edge\">\n",
       "<title>21&#45;&gt;23</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M1072.1298,-103.9815C1079.7189,-94.8828 1087.76,-85.242 1095.3686,-76.1199\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1098.2039,-78.1849 1101.9213,-68.2637 1092.8283,-73.7012 1098.2039,-78.1849\"/>\n",
       "</g>\n",
       "<!-- 25 -->\n",
       "<g id=\"node26\" class=\"node\">\n",
       "<title>25</title>\n",
       "<path fill=\"#e58139\" fill-opacity=\"0.776471\" stroke=\"#000000\" d=\"M1272.5,-187C1272.5,-187 1186.5,-187 1186.5,-187 1180.5,-187 1174.5,-181 1174.5,-175 1174.5,-175 1174.5,-116 1174.5,-116 1174.5,-110 1180.5,-104 1186.5,-104 1186.5,-104 1272.5,-104 1272.5,-104 1278.5,-104 1284.5,-110 1284.5,-116 1284.5,-116 1284.5,-175 1284.5,-175 1284.5,-181 1278.5,-187 1272.5,-187\"/>\n",
       "<text text-anchor=\"middle\" x=\"1229.5\" y=\"-171.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">Population &lt;= 379.5</text>\n",
       "<text text-anchor=\"middle\" x=\"1229.5\" y=\"-156.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.298</text>\n",
       "<text text-anchor=\"middle\" x=\"1229.5\" y=\"-141.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 11</text>\n",
       "<text text-anchor=\"middle\" x=\"1229.5\" y=\"-126.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [9, 2]</text>\n",
       "<text text-anchor=\"middle\" x=\"1229.5\" y=\"-111.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Low</text>\n",
       "</g>\n",
       "<!-- 24&#45;&gt;25 -->\n",
       "<g id=\"edge25\" class=\"edge\">\n",
       "<title>24&#45;&gt;25</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M1229.5,-222.8796C1229.5,-214.6838 1229.5,-205.9891 1229.5,-197.5013\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1233.0001,-197.298 1229.5,-187.2981 1226.0001,-197.2981 1233.0001,-197.298\"/>\n",
       "</g>\n",
       "<!-- 28 -->\n",
       "<g id=\"node29\" class=\"node\">\n",
       "<title>28</title>\n",
       "<path fill=\"#399de5\" stroke=\"#000000\" d=\"M1368,-179.5C1368,-179.5 1315,-179.5 1315,-179.5 1309,-179.5 1303,-173.5 1303,-167.5 1303,-167.5 1303,-123.5 1303,-123.5 1303,-117.5 1309,-111.5 1315,-111.5 1315,-111.5 1368,-111.5 1368,-111.5 1374,-111.5 1380,-117.5 1380,-123.5 1380,-123.5 1380,-167.5 1380,-167.5 1380,-173.5 1374,-179.5 1368,-179.5\"/>\n",
       "<text text-anchor=\"middle\" x=\"1341.5\" y=\"-164.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.0</text>\n",
       "<text text-anchor=\"middle\" x=\"1341.5\" y=\"-149.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 1</text>\n",
       "<text text-anchor=\"middle\" x=\"1341.5\" y=\"-134.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [0, 1]</text>\n",
       "<text text-anchor=\"middle\" x=\"1341.5\" y=\"-119.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = High</text>\n",
       "</g>\n",
       "<!-- 24&#45;&gt;28 -->\n",
       "<g id=\"edge28\" class=\"edge\">\n",
       "<title>24&#45;&gt;28</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M1268.6722,-222.8796C1279.5389,-211.3337 1291.3376,-198.7976 1302.2109,-187.2446\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1304.8986,-189.4958 1309.2036,-179.8149 1299.8012,-184.6982 1304.8986,-189.4958\"/>\n",
       "</g>\n",
       "<!-- 26 -->\n",
       "<g id=\"node27\" class=\"node\">\n",
       "<title>26</title>\n",
       "<path fill=\"#e58139\" fill-opacity=\"0.890196\" stroke=\"#000000\" d=\"M1257,-68C1257,-68 1202,-68 1202,-68 1196,-68 1190,-62 1190,-56 1190,-56 1190,-12 1190,-12 1190,-6 1196,0 1202,0 1202,0 1257,0 1257,0 1263,0 1269,-6 1269,-12 1269,-12 1269,-56 1269,-56 1269,-62 1263,-68 1257,-68\"/>\n",
       "<text text-anchor=\"middle\" x=\"1229.5\" y=\"-52.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.18</text>\n",
       "<text text-anchor=\"middle\" x=\"1229.5\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 10</text>\n",
       "<text text-anchor=\"middle\" x=\"1229.5\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [9, 1]</text>\n",
       "<text text-anchor=\"middle\" x=\"1229.5\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Low</text>\n",
       "</g>\n",
       "<!-- 25&#45;&gt;26 -->\n",
       "<g id=\"edge26\" class=\"edge\">\n",
       "<title>25&#45;&gt;26</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M1229.5,-103.9815C1229.5,-95.618 1229.5,-86.7965 1229.5,-78.3409\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1233.0001,-78.2636 1229.5,-68.2637 1226.0001,-78.2637 1233.0001,-78.2636\"/>\n",
       "</g>\n",
       "<!-- 27 -->\n",
       "<g id=\"node28\" class=\"node\">\n",
       "<title>27</title>\n",
       "<path fill=\"#399de5\" stroke=\"#000000\" d=\"M1352,-68C1352,-68 1299,-68 1299,-68 1293,-68 1287,-62 1287,-56 1287,-56 1287,-12 1287,-12 1287,-6 1293,0 1299,0 1299,0 1352,0 1352,0 1358,0 1364,-6 1364,-12 1364,-12 1364,-56 1364,-56 1364,-62 1358,-68 1352,-68\"/>\n",
       "<text text-anchor=\"middle\" x=\"1325.5\" y=\"-52.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.0</text>\n",
       "<text text-anchor=\"middle\" x=\"1325.5\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 1</text>\n",
       "<text text-anchor=\"middle\" x=\"1325.5\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [0, 1]</text>\n",
       "<text text-anchor=\"middle\" x=\"1325.5\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = High</text>\n",
       "</g>\n",
       "<!-- 25&#45;&gt;27 -->\n",
       "<g id=\"edge27\" class=\"edge\">\n",
       "<title>25&#45;&gt;27</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M1265.2469,-103.9815C1273.1599,-94.7908 1281.5491,-85.0472 1289.4732,-75.8436\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1292.1271,-78.1255 1295.9994,-68.2637 1286.8224,-73.5582 1292.1271,-78.1255\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Use all features excpet response features\n",
    "# No intercept\n",
    "f = 'High ~ 0 + ' + ' + '.join(carseats_df.columns.drop(['Sales', 'High']))\n",
    "y, X = pt.dmatrices(f, carseats_df)\n",
    "y = y.flatten()\n",
    "\n",
    "# Fit Sklearns tree classifier\n",
    "clf = tree.DecisionTreeClassifier(max_depth=4).fit(X, y)\n",
    "\n",
    "# Visualise the tree with GraphViz\n",
    "dot_data = tree.export_graphviz(clf, out_file=None,\n",
    "                                feature_names=X.design_info.column_names,  \n",
    "                                class_names=['Low', 'High'],  \n",
    "                                filled=True, rounded=True)\n",
    "graph = graphviz.Source(dot_data) \n",
    "display(HTML(graph._repr_svg_()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 425,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[(0, 'ShelveLoc[Bad]'),\n",
       " (1, 'ShelveLoc[Good]'),\n",
       " (2, 'ShelveLoc[Medium]'),\n",
       " (3, 'Urban[T.Yes]'),\n",
       " (4, 'US[T.Yes]'),\n",
       " (5, 'CompPrice'),\n",
       " (6, 'Income'),\n",
       " (7, 'Advertising'),\n",
       " (8, 'Population'),\n",
       " (9, 'Price'),\n",
       " (10, 'Age'),\n",
       " (11, 'Education')]"
      ]
     },
     "execution_count": 425,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Provide key for variables\n",
    "list(enumerate(X.design_info.column_names))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### list the variables that are used as internal nodes in the tree, the number of terminal nodes, and the (training) error rate."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 426,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(0.84)"
      ]
     },
     "execution_count": 426,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Classifier achives perfect score on training set due to overfitting\n",
    "clf.score(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 427,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[220,  16],\n",
       "       [ 48, 116]])"
      ]
     },
     "execution_count": 427,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Here's the confusion matrix\n",
    "confusion_matrix(y, clf.predict(X))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Sklearn doesn't expose the same stats as R's summary such as number of leaves. This is what is available."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 428,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Help on class Tree in module sklearn.tree._tree:\n",
      "\n",
      "class Tree(builtins.object)\n",
      " |  Array-based representation of a binary decision tree.\n",
      " |  \n",
      " |  The binary tree is represented as a number of parallel arrays. The i-th\n",
      " |  element of each array holds information about the node `i`. Node 0 is the\n",
      " |  tree's root. You can find a detailed description of all arrays in\n",
      " |  `_tree.pxd`. NOTE: Some of the arrays only apply to either leaves or split\n",
      " |  nodes, resp. In this case the values of nodes of the other type are\n",
      " |  arbitrary!\n",
      " |  \n",
      " |  Attributes\n",
      " |  ----------\n",
      " |  node_count : int\n",
      " |      The number of nodes (internal nodes + leaves) in the tree.\n",
      " |  \n",
      " |  capacity : int\n",
      " |      The current capacity (i.e., size) of the arrays, which is at least as\n",
      " |      great as `node_count`.\n",
      " |  \n",
      " |  max_depth : int\n",
      " |      The maximal depth of the tree.\n",
      " |  \n",
      " |  children_left : array of int, shape [node_count]\n",
      " |      children_left[i] holds the node id of the left child of node i.\n",
      " |      For leaves, children_left[i] == TREE_LEAF. Otherwise,\n",
      " |      children_left[i] > i. This child handles the case where\n",
      " |      X[:, feature[i]] <= threshold[i].\n",
      " |  \n",
      " |  children_right : array of int, shape [node_count]\n",
      " |      children_right[i] holds the node id of the right child of node i.\n",
      " |      For leaves, children_right[i] == TREE_LEAF. Otherwise,\n",
      " |      children_right[i] > i. This child handles the case where\n",
      " |      X[:, feature[i]] > threshold[i].\n",
      " |  \n",
      " |  feature : array of int, shape [node_count]\n",
      " |      feature[i] holds the feature to split on, for the internal node i.\n",
      " |  \n",
      " |  threshold : array of double, shape [node_count]\n",
      " |      threshold[i] holds the threshold for the internal node i.\n",
      " |  \n",
      " |  value : array of double, shape [node_count, n_outputs, max_n_classes]\n",
      " |      Contains the constant prediction value of each node.\n",
      " |  \n",
      " |  impurity : array of double, shape [node_count]\n",
      " |      impurity[i] holds the impurity (i.e., the value of the splitting\n",
      " |      criterion) at node i.\n",
      " |  \n",
      " |  n_node_samples : array of int, shape [node_count]\n",
      " |      n_node_samples[i] holds the number of training samples reaching node i.\n",
      " |  \n",
      " |  weighted_n_node_samples : array of int, shape [node_count]\n",
      " |      weighted_n_node_samples[i] holds the weighted number of training samples\n",
      " |      reaching node i.\n",
      " |  \n",
      " |  Methods defined here:\n",
      " |  \n",
      " |  __getstate__(...)\n",
      " |      Getstate re-implementation, for pickling.\n",
      " |  \n",
      " |  __new__(*args, **kwargs) from builtins.type\n",
      " |      Create and return a new object.  See help(type) for accurate signature.\n",
      " |  \n",
      " |  __reduce__(...)\n",
      " |      Reduce re-implementation, for pickling.\n",
      " |  \n",
      " |  __setstate__(...)\n",
      " |      Setstate re-implementation, for unpickling.\n",
      " |  \n",
      " |  apply(...)\n",
      " |      Finds the terminal region (=leaf node) for each sample in X.\n",
      " |  \n",
      " |  compute_feature_importances(...)\n",
      " |      Computes the importance of each feature (aka variable).\n",
      " |  \n",
      " |  decision_path(...)\n",
      " |      Finds the decision path (=node) for each sample in X.\n",
      " |  \n",
      " |  predict(...)\n",
      " |      Predict target for X.\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Data descriptors defined here:\n",
      " |  \n",
      " |  capacity\n",
      " |  \n",
      " |  children_left\n",
      " |  \n",
      " |  children_right\n",
      " |  \n",
      " |  feature\n",
      " |  \n",
      " |  impurity\n",
      " |  \n",
      " |  max_depth\n",
      " |  \n",
      " |  max_n_classes\n",
      " |  \n",
      " |  n_classes\n",
      " |  \n",
      " |  n_features\n",
      " |  \n",
      " |  n_node_samples\n",
      " |  \n",
      " |  n_outputs\n",
      " |  \n",
      " |  node_count\n",
      " |  \n",
      " |  threshold\n",
      " |  \n",
      " |  value\n",
      " |  \n",
      " |  weighted_n_node_samples\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Data and other attributes defined here:\n",
      " |  \n",
      " |  __pyx_vtable__ = <capsule object NULL>\n",
      "\n"
     ]
    }
   ],
   "source": [
    "help(tree._tree.Tree)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 429,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "29"
      ]
     },
     "execution_count": 429,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "clf.tree_.node_count"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 430,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4"
      ]
     },
     "execution_count": 430,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "clf.tree_.max_depth"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 431,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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paSkKDAwUAEBAXr11Vd18eJFe74NAACAWoGiW0tUVFRoy5Yt6tatmyTp8ccf15YtW9SkSRPrObGxsXrqqae0YcMGvfjii1qwYIGOHTumVatW6aOPPlJqaqo8PDy0aNEie70NAACAWsPJ3gFuZ7m5uQoICJAklZeX6/7779fkyZO1a9cuPfDAA5ecv3//fr399tuSpD59+qhPnz76+9//rqysLAUHB0v6sTB36tSp5t4EAABALUXRtaOf9uheTv369S855uT0f39dFotF3377raqqqjRo0CBFRkZKkoqLi1VVVWWbwAAAAHUIWxfqkIceekhpaWmSpN27dysqKko9e/bUxx9/rPz8fFksFsXExGjp0qV2TgoAAGB/rOjWIdHR0YqMjFRSUpIaNGigadOmqV27dpo4caJGjRols9msjh07KiwszN5RAQAA7M5ksVgs9g4B+5oUl6K8gmJ7xwAAALVIUnyIzpwpvOp5np5u13TezXJwMMnDw/X6rrFRFgAAAMCuKLoAAAAwJIouAAAADImiCwAAAEOi6AIAAMCQKLoAAAAwJIouAAAADImiCwAAAEOi6AIAAMCQKLoAAAAwJIouAAAADImiCwAAAEOi6AIAAMCQTBaLxWLvEAAAAKhdyi5WqPBC2VXP8/R005kzhTbP4+BgkoeH63Vd42SjLKhD8vOLZDbz7x1bqKn/+W9nzLHtMce2xfzaHnN8+2LrAgAAAAyJogsAAABDougCAADAkCi6AAAAMCSKLgAAAAyJogsAAABDougCAADAkHiOLq774cu4Pp6ebvaOYHjXO8fX+hB0AEDdRtGFJsWlKK+g2N4xgBqTFB+iQlF0AcDo2LoAAAAAQ6LoAgAAwJAougAAADAkii4AAAAMiaILAAAAQ6LoAgAAwJAougAAADAkii4AAAAMiaILAAAAQ6LoAgAAwJAougAAADAkii4AAAAMiaL7M998843at2+vLVu2XPb7e/fuVWho6E3f5+TJk3r11VclSV9++aVee+21K577ySef6J133rnpewIAANxunOwdoDZZs2aNBg4cqJUrV+qpp56y2X3++9//6uTJk5Kkrl27qmvXrlc8t1+/furXr5/NsgAAABgVRfd/VVRUaP369frwww81fPhwff/997rnnnuUnp6uuLg41a9fX23atJEkZWZmKjw8XOvXr5ckbdu2Tf/4xz+0YMECLVy4UJs2bVJVVZUeffRRhYeH69SpUxozZozc3d3l4uKivLw8ZWdnKzY2VgMHDtS7776r5cuXa/HixVq7dq0cHBx0//3364033lBycrL27dunGTNmyNvbW/7+/kpPT1dpaalmzpypLl266JtvvlFERISqqqr00EMPaefOnfr444/tOZ0AAAB2x9aF/7Vjxw61bNlSbdq0Uf/+/bVy5UqVl5crIiJCCQkJSk5OlouLiySpQ4cOMplM+uabbyRJaWlp8vf3186dO5WRkaHVq1crJSVFOTk5WrdunSTpu+++06xZs7R48WJFRkaqS5cuev311633r6qq0vvvv681a9YoOTlZFRUVysnJuSRn48aNtXr1ag0fPlzvv/++JCkiIkJ//OMflZqaqrvvvltVVVW2ni4AAIBaj6L7v9asWSNfX19Jko+Pj5KTk5WZmalmzZqpbdu2kqTAwEDr+f7+/kpLS1NZWZn2798vb29vff755zp8+LCGDh2qwMBAZWRk6Pjx45IkDw8PtWrV6or3d3R0VPfu3TVs2DC9++67Gj16tJo3b37JeY899pgk6b777tO5c+d07tw5nTp1Sn369JEkBQUF3ZoJAQAAqOPYuiApPz9fn332mb766istW7ZMFotFFy5c0K5du2SxWKznOTo6Wr/28/PTqFGj1KFDBz366KOqX7++qqqqNGrUKI0ePVqSdOHCBTk6OqqgoMC6Gvxr5s+fry+++EI7d+7UmDFjNHv27EvOqV+/viTJZDJZM/08IwAAAH7Eiq6k1NRUeXl5aefOndq2bZs+/fRTjRs3Tjt27FBeXp4yMzMl/bhF4SfNmzdXixYttHDhQvn7+0uSvLy8lJqaquLiYlVWVmrChAmXfYKDo6OjKisrqx07e/asfHx89Lvf/U5//OMf9cgjj+jo0aNXze7m5qa7775bO3bskCTrvmEAAIDbHUVX0tq1a/Xss89WOxYSEqIjR47o7bffVnh4uAIDA1VaWlrtnICAAJ09e1Y9evSQJHl7e+vJJ59UcHCwfH191aFDh2rbHX7Stm1bFRYWKjw83HqsSZMmeuaZZzRs2DANHTpU5eXl17wNIT4+XvPnz1dgYKAOHz58TavHAAAARmey8HPvOu/dd99VcHCwmjVrpn/+859av369EhMTr/n6SXEpyisotmFCoHZJig/RmTOF9o5R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tetNZ1y+fLk1EwAAwO3OZiu6BQUFqqioUFlZmSTpjjvu0IwZM9SuXTtJ0rx58zRkyBA99dRTOnTokCQpKytLo0ePVmBgoEaMGKGvv/662phxcXH629/+Zn394osv6uOPP1ZeXp7Gjx+voUOHKigoSLt37/7VbKWlpZo8ebJ8fX3l5+enlJQUSdLFixf16quv6qmnnpKvr682btx42euffPJJbdmyxfp669ateuKJJ6yvi4uLNWXKFA0dOlQBAQHasGGDJKm8vFzh4eEaNGiQxowZo4KCAknS3r17rQX1p1VeScrOzrauEkdERCg2NlbPPPOMBg0apI8//lgTJ05U//79NWPGjF99vwAAALcjmxXdDh06qF+/furfv7+GDRumWbNmyWw2695775UktWvXTikpKQoNDdWiRYskSVOmTFF4eLjWrl2rN998Uy+99FK1MX9eGouKinTw4EH16dNH06dPV1BQkJKTk7VgwQJFR0erqKjoitkSExPl7u6uDRs2aOnSpUpMTFRmZqaWL1+ukpISbdq0SYsXL9a8efNUXl5+yfUdO3ZUfn6+8vLyJEmbNm3SoEGDrN9fsGCBOnfurOTkZH344Yd67733dPLkSS1fvtx6fmRkpL7//vvrmtPc3FytXLlSYWFhmjp1qmJjY5WSkqJVq1apsLDwusYCAAAwOpttXZCk2NhYjR8/Xunp6UpPT1dwcLBmz54tSerfv7+kHwvvli1bVFxcrIyMDE2dOtV6fUlJiXXVU5I6deqk8vJyZWVl6eDBg/L29pazs7N2796tEydOKCEhQZJUWVmpkydPXjHXnj179NZbb0mSmjRpon79+mnfvn3av3+/goOD5eDgIE9PT6WlpV1xjCeffFL//Oc/NXjwYBUVFemuu+6yfm/37t0qKyvTmjVrrO/j2LFj2rdvn5555hlJUuvWrdW9e/frms/HH39cktSyZUvdd9998vDwkCQ1btxY58+fl5ub23WNBwAAYGQ2K7rbt29XSUmJfHx8FBQUpKCgIK1atUqrV6+WJDk6OkqSTCaTJMlsNsvZ2VmpqanWMU6fPq3GjRtXG9ff318bN27UwYMHFRYWZr126dKl1nNzc3Pl4eGhrVu3XjabxWK55HVVVZWcnJyseaQft1K0aNHismMMGjRIcXFxcnZ21oABA6p9z2w2a9asWercubMkKS8vT3fe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ae593bt316ZNm3Tu3DmdP39eDQ0NX/o6hw8f1pIlSyRJISEhGjFihI4eParAwEANGjRIgYGBkqRHH31UdXV1t/eGAQAADMKlC1+RzWaTy+Vyf+/j0/5nhf/sa21tlSTZ7XbZbDb3/qamJl28eFF79+5Vamqq/Pz8NGHCBEVFRbV73S/64j6Xy6W2tjZJkq+v75fOBwAA0FVRdL+iwYMH68SJE6qsrJTT6VRRUZF7X3BwsD799FNJ0t69eyVJQUFBCg8P18GDByVd/3BZTk6ODh06pNGjR2vixIm6//77deTIEXdx9fb2dhfl//jGN76hrVu3Srp+lnjv3r0aOnSo5e8XAACgs+LShVu42TW6UVFRmjdvnr773e/qvvvu05NPPunel5ycrKysLK1Zs0bDhw93b8/OzlZGRoays7MVHBys5cuXq7a2VqmpqSosLJTdbtezzz7r/iDbiBEj5HA4lJ+f736NH/3oR8rIyFBiYqLa2tr06quvqn///vr73/9ucQoAAACdk83F77m7vJqaq3I6WQZWCA0NUnV1vafHMBoZW4+MrUW+1iNja3VUvl5eNvXoEfjVnmPRLAAAAIBHUXQBAABgJIouAAAAjETRBQAAgJEougAAADASRRcAAABGougCAADASBRdAAAAGImiCwAAACNRdAEAAGAkii4AAACMRNEFAACAkSi6AAAAMBJFFwAAAEai6AIAAMBIFF0AAAAYiaILAAAAI/l4egB4npeXzdMjGI18rUfG1iNja5Gv9cjYWh2R7+0cw+ZyuVwWzAIAAAB4FJcuAAAAwEgUXQAAABiJogsAAAAjUXQBAABgJIouAAAAjETRBQAAgJEougAAADASRRcAAABGougCAADASBRdAAAAGImiCwAAACNRdLuIxsZGrVixQnFxcRowYIAGDhyokSNHKisrS/X19Z4ezwjvvPOOJOnKlStKTU3V17/+dT333HNauHChrl696uHpOj/WsPVYw9ZjHVuLNWy9zraGKbpdRGpqqvz9/bVx40adOHFCf/3rX7VhwwaFhobqZz/7mafHM8KBAwckSVlZWXrooYe0Z88eFRYWKjQ0VG+88YaHp+v8WMPWYw1bj3VsLdaw9TrdGnahSxg9evSX7ktISOjAScw1btw4l8vlco0dO/aGfWPGjOnocYzDGrYea9h6rGNrsYat19nWMGd0u4iQ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\n",
      "text/plain": [
       "<Figure size 720x720 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot feature by importance in this model\n",
    "\n",
    "plot_df = pd.DataFrame({'feature': X.design_info.column_names, 'importance': clf.feature_importances_})\n",
    "\n",
    "plt.figure(figsize=(10,10))\n",
    "sns.barplot(x='importance', y='feature', data=plot_df.sort_values('importance', ascending=False),\n",
    "            color='b')\n",
    "plt.xticks(rotation=90);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In order to properly evaluate the performance of a classification tree on these data, we must estimate the test error rather than simply computing the training error. We split the observations into a training set and a test set, build the tree using the training set, and evaluate its performance on the test data. The predict() function can be used for this purpose. In the case of a classification tree, the argument type=\"class\" instructs R to return the actual class prediction. This approach leads to correct predictions for around 71.5 % of the locations in the test data set."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 432,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[93, 16],\n",
       "       [35, 40]])"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test accuracy: 0.7228\n"
     ]
    }
   ],
   "source": [
    "# Fit Sklearn's tree classifier\n",
    "clf = tree.DecisionTreeClassifier(max_depth=5).fit(X[train], y[train])\n",
    "\n",
    "# Get confusion matrix for test set\n",
    "y_hat = clf.predict(X[~train])\n",
    "display(confusion_matrix(y[~train], y_hat))\n",
    "\n",
    "# Get proportion of correct classifications on test set\n",
    "print('Test accuracy: {}'.format(np.around(clf.score(X[~train], y[~train]), 4)))\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Note variance in this result if above code snippet is run repeatedly."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Tree Pruning\n",
    "\n",
    "Sklearn doesn't support tree pruning at time of writing. \n",
    "\n",
    "This is the closest I could find to an implementation:\n",
    "https://stackoverflow.com/questions/49428469/pruning-decision-trees\n",
    "\n",
    "But the above is not pruning as described in ISL, because in ISL the tree is fit with a penalty function for the number of terminal nodes in the tree (see eq 8.4 p 309), whereas the above example is pruning based on some threshold for the 'value' variable, the meaning of which is unclear to me."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 621,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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rDZt2jRq/Jdeekn/+te/5Pf7lZaWpvvuu0+dO3fW3r17NWPGDFVWVio/P1/du3fX3Llz9ac//UmbN2/WoUOHVFxcrBtuuOFbf3evXr10yy23aOXKlcrLy9PPf/5zjRs3TpL0+OOP64033pDL5VLHjh113333KSMjQ7t27dK0adNUXV2tTp06qaqqqu73ffbZZ5o9e7aqq6vldDp15513asiQIcrPz9evf/1rFRcXSzq+C/7dd9/d9L8UAC2fBQCGfPLJJ1aPHj2srVu3WpZlWTfffLN1zTXXWDU1NVZhYaGVnZ1trVu3zrrrrrssn89nWZZlPfXUU9att95qWZZl5ebmWgMHDrTefvtt6+KLL7bWrl37vWOeffbZVmFhobVmzRpr3LhxVlVVlWVZlvXRRx9Zl19+uWVZljVz5kxr6dKllmVZVm1trTV8+HBr+fLllmVZ1nXXXWe99dZbjRrn+eeftyzLsjZv3mz17NnTcrvd1ssvv2xdc801VmVlpWVZljVv3jzrpptusizLskaNGmUtWrTIsizLWrdundWtWzfrk08+sUpKSqycnBzr4MGDlmVZ1rFjx6xBgwZZhw8fth577DHrvvvusyzLsiorK627777bKisr+958AEIXnTcARp1xxhk655xzJElnnnmmkpOTFRMTo/T0dCUmJio5OVl33323XnjhBR08eFBr1qxRYmKiJCkzM1MPPPCAfvGLX+iuu+5S//79Gz3uBx98oP3792vs2LF1r5WVlamkpERTpkzRypUr9cwzz2jfvn3Ky8ur1wVrrEsvvVSSlJ2drdraWlVVVek///mPRo8erYSEBEnShAkT9OSTT6qgoEDbt2/XlVdeKUk677zz1LVrV0nS559/rvz8fN1xxx11v9vhcGj79u26+OKLdcstt+jo0aMaOHCgfvWrXyk5OfmUswIIHRRvAIyKiYmpdxwVVf+fpdWrV2vBggW68cYbdemll6pTp0567bXX6t7ftWuX2rRpo02bNp3SFEK3EgAAAllJREFUuH6/X6NGjdKUKVPqjvPy8pSamqrJkyfL5/PpJz/5iQYPHqyjR4/KasJjoGNjYyUdL7QkybIs+f3+uuMT43q93rrj/x7nxFz4fD517txZL730Ut17ubm5Sk9PV3R0tN59912tXr1an3zyia6++mo988wz6tmz5ynnBRAauNsUQIv2/vvva8iQIRo3bpx69uypd955Rz6fT5K0adMmPffcc3rllVdUXl6uZ599ttG/96KLLtIbb7yhvLw8SdK//vUvXX/99ZKkjz/+WHfccYeuuOIKSdLGjRvrxmyuiy++WK+88kpdJ+/5559X//791aZNG2VnZ9cVaFu3btWOHTskSX369NH+/fv16aefSpK2bdumoUOHKjc3V7Nnz9b8+fP14x//WPfee6+6dOminTt3BiQrgJaJzhuAFm3atGm65557NGLECHm9Xv3whz/UihUrVF5erl/+8peaPn262rZtq5kzZ+rqq69W//7965Zhv8tFF12kiRMn6qabbpLD4VBSUpIee+wxORwOTZ48WXfccYcSEhKUlJSk/v3768CBAwH584wZM0ZHjx7V1VdfLb/frw4dOmj27NmSpEceeUS/+c1v9MILL+jMM89Up06dJEnp6emaN2+eZs2apZqaGlmWpVmzZumMM87Q9ddfr6lTp2r48OGKiYlRt27dNGzYsIBkBdAyOaymrAUAAADACDpvAMLKX/7yFy1btuyk7918880aOXJkSI0DAN9E5w0AACCEcMMCAABACKF4AwAACCEUbwAAACGE4g0AACCEULwBAACEkP8PxN8+LXyqoVQAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 720x720 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# How about using CV to compare trees with different number of leaf nodes \n",
    "# as defined by the max_leaf_nodes parameter?\n",
    "\n",
    "tuning_param = 'max_leaf_nodes'\n",
    "columns=[tuning_param, 'accuracy', 'accuracy_upper', 'accuracy_lower']\n",
    "\n",
    "results = []\n",
    "for m in np.arange(2, 40):\n",
    "    clf = tree.DecisionTreeClassifier(max_leaf_nodes=m)\n",
    "    scores = cross_val_score(clf, X, y, cv=2)\n",
    "    #rmses = np.sqrt(np.absolute(scores))\n",
    "    rmse = np.mean(scores)\n",
    "    conf_int = np.std(scores) *2\n",
    "    results += [[m, rmse, rmse+conf_int, rmse-conf_int]]\n",
    "\n",
    "\n",
    "# Plot classification accuracy for each max_depth cv result\n",
    "plot_df = pd.DataFrame(np.asarray(results), columns=columns).set_index(tuning_param)\n",
    "plt.figure(figsize=(10,10))\n",
    "sns.lineplot(data=plot_df)\n",
    "plt.ylabel('accurcay');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Above we plot 2-fold cv test accuracy for increasing number of leave nodes. ~15 leaves appears optimal. The model appears to overfit only slightly as the number of leaves increases.\n",
    "\n",
    "Note, and alternative approach is to increase max_depth as a more coarse tuning parameter."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 8.3.2 Fitting Regression Trees\n",
    "\n",
    "Here we fit a regression tree to the Boston data set. First, we create a training set, and fit the tree to the training data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 613,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CRIM</th>\n",
       "      <th>ZN</th>\n",
       "      <th>INDUS</th>\n",
       "      <th>CHAS</th>\n",
       "      <th>NOX</th>\n",
       "      <th>RM</th>\n",
       "      <th>AGE</th>\n",
       "      <th>DIS</th>\n",
       "      <th>RAD</th>\n",
       "      <th>TAX</th>\n",
       "      <th>PTRATIO</th>\n",
       "      <th>B</th>\n",
       "      <th>LSTAT</th>\n",
       "      <th>Price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.00632</td>\n",
       "      <td>18.0</td>\n",
       "      <td>2.31</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.538</td>\n",
       "      <td>6.575</td>\n",
       "      <td>65.2</td>\n",
       "      <td>4.0900</td>\n",
       "      <td>1.0</td>\n",
       "      <td>296.0</td>\n",
       "      <td>15.3</td>\n",
       "      <td>396.90</td>\n",
       "      <td>4.98</td>\n",
       "      <td>24.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.02731</td>\n",
       "      <td>0.0</td>\n",
       "      <td>7.07</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.469</td>\n",
       "      <td>6.421</td>\n",
       "      <td>78.9</td>\n",
       "      <td>4.9671</td>\n",
       "      <td>2.0</td>\n",
       "      <td>242.0</td>\n",
       "      <td>17.8</td>\n",
       "      <td>396.90</td>\n",
       "      <td>9.14</td>\n",
       "      <td>21.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.02729</td>\n",
       "      <td>0.0</td>\n",
       "      <td>7.07</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.469</td>\n",
       "      <td>7.185</td>\n",
       "      <td>61.1</td>\n",
       "      <td>4.9671</td>\n",
       "      <td>2.0</td>\n",
       "      <td>242.0</td>\n",
       "      <td>17.8</td>\n",
       "      <td>392.83</td>\n",
       "      <td>4.03</td>\n",
       "      <td>34.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.03237</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.18</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.458</td>\n",
       "      <td>6.998</td>\n",
       "      <td>45.8</td>\n",
       "      <td>6.0622</td>\n",
       "      <td>3.0</td>\n",
       "      <td>222.0</td>\n",
       "      <td>18.7</td>\n",
       "      <td>394.63</td>\n",
       "      <td>2.94</td>\n",
       "      <td>33.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.06905</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.18</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.458</td>\n",
       "      <td>7.147</td>\n",
       "      <td>54.2</td>\n",
       "      <td>6.0622</td>\n",
       "      <td>3.0</td>\n",
       "      <td>222.0</td>\n",
       "      <td>18.7</td>\n",
       "      <td>396.90</td>\n",
       "      <td>5.33</td>\n",
       "      <td>36.2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      CRIM    ZN  INDUS  CHAS    NOX     RM   AGE     DIS  RAD    TAX  \\\n",
       "0  0.00632  18.0   2.31   0.0  0.538  6.575  65.2  4.0900  1.0  296.0   \n",
       "1  0.02731   0.0   7.07   0.0  0.469  6.421  78.9  4.9671  2.0  242.0   \n",
       "2  0.02729   0.0   7.07   0.0  0.469  7.185  61.1  4.9671  2.0  242.0   \n",
       "3  0.03237   0.0   2.18   0.0  0.458  6.998  45.8  6.0622  3.0  222.0   \n",
       "4  0.06905   0.0   2.18   0.0  0.458  7.147  54.2  6.0622  3.0  222.0   \n",
       "\n",
       "   PTRATIO       B  LSTAT  Price  \n",
       "0     15.3  396.90   4.98   24.0  \n",
       "1     17.8  396.90   9.14   21.6  \n",
       "2     17.8  392.83   4.03   34.7  \n",
       "3     18.7  394.63   2.94   33.4  \n",
       "4     18.7  396.90   5.33   36.2  "
      ]
     },
     "execution_count": 613,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "boston_df = datasets.load_boston()\n",
    "boston_df = pd.DataFrame(data=np.c_[boston_df['data'], boston_df['target']], columns= [c for c in boston_df['feature_names']] + ['Price'])\n",
    "\n",
    "np.random.seed(1)\n",
    "train = np.random.rand(len(boston_df)) < 0.5\n",
    "\n",
    "boston_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 614,
   "metadata": {},
   "outputs": [],
   "source": [
    "f = 'Price ~ ' + ' + '.join(boston_df.columns.drop(['Price']))\n",
    "y, X = pt.dmatrices(f, boston_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 615,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RMSE test: 5.521\n"
     ]
    }
   ],
   "source": [
    "# Fit Sklearns tree classifier\n",
    "clf = tree.DecisionTreeRegressor(max_leaf_nodes=5).fit(X[train], y[train])\n",
    "\n",
    "y_hat = clf.predict(X[~train])\n",
    "rmse = np.sqrt(metrics.mean_squared_error(y[~train], y_hat))\n",
    "print('RMSE test: {}'.format(np.around(rmse, 3)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 616,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n",
       " -->\n",
       "<!-- Title: Tree Pages: 1 -->\n",
       "<svg width=\"459pt\" height=\"373pt\"\n",
       " viewBox=\"0.00 0.00 459.00 373.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 369)\">\n",
       "<title>Tree</title>\n",
       "<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-369 455,-369 455,4 -4,4\"/>\n",
       "<!-- 0 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>0</title>\n",
       "<path fill=\"#e58139\" fill-opacity=\"0.227451\" stroke=\"#000000\" d=\"M285,-365C285,-365 215,-365 215,-365 209,-365 203,-359 203,-353 203,-353 203,-309 203,-309 203,-303 209,-297 215,-297 215,-297 285,-297 285,-297 291,-297 297,-303 297,-309 297,-309 297,-353 297,-353 297,-359 291,-365 285,-365\"/>\n",
       "<text text-anchor=\"middle\" x=\"250\" y=\"-349.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">LSTAT &lt;= 9.545</text>\n",
       "<text text-anchor=\"middle\" x=\"250\" y=\"-334.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 83.772</text>\n",
       "<text text-anchor=\"middle\" x=\"250\" y=\"-319.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 240</text>\n",
       "<text text-anchor=\"middle\" x=\"250\" y=\"-304.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 22.411</text>\n",
       "</g>\n",
       "<!-- 1 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>1</title>\n",
       "<path fill=\"#e58139\" fill-opacity=\"0.458824\" stroke=\"#000000\" d=\"M226,-261C226,-261 164,-261 164,-261 158,-261 152,-255 152,-249 152,-249 152,-205 152,-205 152,-199 158,-193 164,-193 164,-193 226,-193 226,-193 232,-193 238,-199 238,-205 238,-205 238,-249 238,-249 238,-255 232,-261 226,-261\"/>\n",
       "<text text-anchor=\"middle\" x=\"195\" y=\"-245.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">RM &lt;= 7.445</text>\n",
       "<text text-anchor=\"middle\" x=\"195\" y=\"-230.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 85.91</text>\n",
       "<text text-anchor=\"middle\" x=\"195\" y=\"-215.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 87</text>\n",
       "<text text-anchor=\"middle\" x=\"195\" y=\"-200.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 30.649</text>\n",
       "</g>\n",
       "<!-- 0&#45;&gt;1 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>0&#45;&gt;1</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M231.9909,-296.9465C227.4801,-288.4169 222.5809,-279.153 217.8686,-270.2424\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"220.8185,-268.3337 213.0495,-261.13 214.6306,-271.6062 220.8185,-268.3337\"/>\n",
       "<text text-anchor=\"middle\" x=\"205.6868\" y=\"-281.3212\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">True</text>\n",
       "</g>\n",
       "<!-- 2 -->\n",
       "<g id=\"node7\" class=\"node\">\n",
       "<title>2</title>\n",
       "<path fill=\"#e58139\" fill-opacity=\"0.098039\" stroke=\"#000000\" d=\"M343.5,-261C343.5,-261 268.5,-261 268.5,-261 262.5,-261 256.5,-255 256.5,-249 256.5,-249 256.5,-205 256.5,-205 256.5,-199 262.5,-193 268.5,-193 268.5,-193 343.5,-193 343.5,-193 349.5,-193 355.5,-199 355.5,-205 355.5,-205 355.5,-249 355.5,-249 355.5,-255 349.5,-261 343.5,-261\"/>\n",
       "<text text-anchor=\"middle\" x=\"306\" y=\"-245.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">LSTAT &lt;= 16.085</text>\n",
       "<text text-anchor=\"middle\" x=\"306\" y=\"-230.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 22.015</text>\n",
       "<text text-anchor=\"middle\" x=\"306\" y=\"-215.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 153</text>\n",
       "<text text-anchor=\"middle\" x=\"306\" y=\"-200.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 17.726</text>\n",
       "</g>\n",
       "<!-- 0&#45;&gt;2 -->\n",
       "<g id=\"edge6\" class=\"edge\">\n",
       "<title>0&#45;&gt;2</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M268.3365,-296.9465C272.9777,-288.3271 278.0227,-278.9579 282.8671,-269.9611\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"285.9629,-271.5941 287.6223,-261.13 279.7996,-268.2754 285.9629,-271.5941\"/>\n",
       "<text text-anchor=\"middle\" x=\"294.806\" y=\"-281.3757\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">False</text>\n",
       "</g>\n",
       "<!-- 3 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>3</title>\n",
       "<path fill=\"#e58139\" fill-opacity=\"0.392157\" stroke=\"#000000\" d=\"M124,-157C124,-157 60,-157 60,-157 54,-157 48,-151 48,-145 48,-145 48,-101 48,-101 48,-95 54,-89 60,-89 60,-89 124,-89 124,-89 130,-89 136,-95 136,-101 136,-101 136,-145 136,-145 136,-151 130,-157 124,-157\"/>\n",
       "<text text-anchor=\"middle\" x=\"92\" y=\"-141.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">CRIM &lt;= 5.106</text>\n",
       "<text text-anchor=\"middle\" x=\"92\" y=\"-126.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 51.815</text>\n",
       "<text text-anchor=\"middle\" x=\"92\" y=\"-111.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 76</text>\n",
       "<text text-anchor=\"middle\" x=\"92\" y=\"-96.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 28.301</text>\n",
       "</g>\n",
       "<!-- 1&#45;&gt;3 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>1&#45;&gt;3</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M161.2739,-192.9465C152.2039,-183.7884 142.2955,-173.7838 132.8819,-164.2788\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"135.3255,-161.7723 125.8018,-157.13 130.3519,-166.6981 135.3255,-161.7723\"/>\n",
       "</g>\n",
       "<!-- 4 -->\n",
       "<g id=\"node6\" class=\"node\">\n",
       "<title>4</title>\n",
       "<path fill=\"#e58139\" fill-opacity=\"0.913725\" stroke=\"#000000\" d=\"M228,-149.5C228,-149.5 166,-149.5 166,-149.5 160,-149.5 154,-143.5 154,-137.5 154,-137.5 154,-108.5 154,-108.5 154,-102.5 160,-96.5 166,-96.5 166,-96.5 228,-96.5 228,-96.5 234,-96.5 240,-102.5 240,-108.5 240,-108.5 240,-137.5 240,-137.5 240,-143.5 234,-149.5 228,-149.5\"/>\n",
       "<text text-anchor=\"middle\" x=\"197\" y=\"-134.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 20.189</text>\n",
       "<text text-anchor=\"middle\" x=\"197\" y=\"-119.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 11</text>\n",
       "<text text-anchor=\"middle\" x=\"197\" y=\"-104.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 46.873</text>\n",
       "</g>\n",
       "<!-- 1&#45;&gt;4 -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>1&#45;&gt;4</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M195.6549,-192.9465C195.8603,-182.2621 196.088,-170.4254 196.2966,-159.5742\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"199.7966,-159.6076 196.4896,-149.5422 192.7979,-159.473 199.7966,-159.6076\"/>\n",
       "</g>\n",
       "<!-- 5 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>5</title>\n",
       "<path fill=\"#e58139\" fill-opacity=\"0.360784\" stroke=\"#000000\" d=\"M74,-53C74,-53 12,-53 12,-53 6,-53 0,-47 0,-41 0,-41 0,-12 0,-12 0,-6 6,0 12,0 12,0 74,0 74,0 80,0 86,-6 86,-12 86,-12 86,-41 86,-41 86,-47 80,-53 74,-53\"/>\n",
       "<text text-anchor=\"middle\" x=\"43\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 27.083</text>\n",
       "<text text-anchor=\"middle\" x=\"43\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 72</text>\n",
       "<text text-anchor=\"middle\" x=\"43\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 27.096</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;5 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>3&#45;&gt;5</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M74.7244,-88.9777C70.3538,-80.3702 65.6462,-71.0992 61.23,-62.402\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"64.2304,-60.5802 56.5821,-53.2485 57.9889,-63.7495 64.2304,-60.5802\"/>\n",
       "</g>\n",
       "<!-- 6 -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>6</title>\n",
       "<path fill=\"#e58139\" stroke=\"#000000\" d=\"M166,-53C166,-53 116,-53 116,-53 110,-53 104,-47 104,-41 104,-41 104,-12 104,-12 104,-6 110,0 116,0 116,0 166,0 166,0 172,0 178,-6 178,-12 178,-12 178,-41 178,-41 178,-47 172,-53 166,-53\"/>\n",
       "<text text-anchor=\"middle\" x=\"141\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = &#45;0.0</text>\n",
       "<text text-anchor=\"middle\" x=\"141\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 4</text>\n",
       "<text text-anchor=\"middle\" x=\"141\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 50.0</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;6 -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>3&#45;&gt;6</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M109.2756,-88.9777C113.6462,-80.3702 118.3538,-71.0992 122.77,-62.402\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"126.0111,-63.7495 127.4179,-53.2485 119.7696,-60.5802 126.0111,-63.7495\"/>\n",
       "</g>\n",
       "<!-- 7 -->\n",
       "<g id=\"node8\" class=\"node\">\n",
       "<title>7</title>\n",
       "<path fill=\"#e58139\" fill-opacity=\"0.168627\" stroke=\"#000000\" d=\"M335,-149.5C335,-149.5 273,-149.5 273,-149.5 267,-149.5 261,-143.5 261,-137.5 261,-137.5 261,-108.5 261,-108.5 261,-102.5 267,-96.5 273,-96.5 273,-96.5 335,-96.5 335,-96.5 341,-96.5 347,-102.5 347,-108.5 347,-108.5 347,-137.5 347,-137.5 347,-143.5 341,-149.5 335,-149.5\"/>\n",
       "<text text-anchor=\"middle\" x=\"304\" y=\"-134.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 9.514</text>\n",
       "<text text-anchor=\"middle\" x=\"304\" y=\"-119.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 88</text>\n",
       "<text text-anchor=\"middle\" x=\"304\" y=\"-104.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 20.274</text>\n",
       "</g>\n",
       "<!-- 2&#45;&gt;7 -->\n",
       "<g id=\"edge7\" class=\"edge\">\n",
       "<title>2&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M305.3451,-192.9465C305.1397,-182.2621 304.912,-170.4254 304.7034,-159.5742\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"308.2021,-159.473 304.5104,-149.5422 301.2034,-159.6076 308.2021,-159.473\"/>\n",
       "</g>\n",
       "<!-- 8 -->\n",
       "<g id=\"node9\" class=\"node\">\n",
       "<title>8</title>\n",
       "<path fill=\"transparent\" stroke=\"#000000\" d=\"M439,-149.5C439,-149.5 377,-149.5 377,-149.5 371,-149.5 365,-143.5 365,-137.5 365,-137.5 365,-108.5 365,-108.5 365,-102.5 371,-96.5 377,-96.5 377,-96.5 439,-96.5 439,-96.5 445,-96.5 451,-102.5 451,-108.5 451,-108.5 451,-137.5 451,-137.5 451,-143.5 445,-149.5 439,-149.5\"/>\n",
       "<text text-anchor=\"middle\" x=\"408\" y=\"-134.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 18.254</text>\n",
       "<text text-anchor=\"middle\" x=\"408\" y=\"-119.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 65</text>\n",
       "<text text-anchor=\"middle\" x=\"408\" y=\"-104.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 14.277</text>\n",
       "</g>\n",
       "<!-- 2&#45;&gt;8 -->\n",
       "<g id=\"edge8\" class=\"edge\">\n",
       "<title>2&#45;&gt;8</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M339.3986,-192.9465C350.7418,-181.3809 363.4092,-168.4652 374.7415,-156.9107\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"377.4649,-159.1323 381.9683,-149.5422 372.4674,-154.2308 377.4649,-159.1323\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Visualise the tree with GraphViz\n",
    "dot_data = tree.export_graphviz(clf, out_file=None,\n",
    "                                feature_names=X.design_info.column_names, \n",
    "                                filled=True, rounded=True)\n",
    "graph = graphviz.Source(dot_data) \n",
    "display(HTML(graph._repr_svg_()))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The variable LSTAT measures the percentage of individuals with lower socioeconomic status. The tree indicates that lower values of LSTAT correspond to more expensive houses. The tree predicts a house price of $46,873 for larger homes in suburbs in which residents have high socioeconomic status (LSTAT<9.545 and RM>7.445).\n",
    "\n",
    "Now we use the cv.tree() function to see whether pruning the tree will improve performance."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 463,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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ADy+Pg3pcQbcOHfsB/MSERGRZ3jnRCQasbRYA9JiDZ4ug4iIiMaAPWZEREREXoLBjIiIiMhLMJgREREReQkGMyIiIiIvwWBGRERE5CUYzIiIiIi8BIMZERERkZdgMCMiIiLyEgxmRERERF6CwYyIiIjISzCYEREREXkJBjMiIiIiL8FgRkREROQlGMyIiIiIvASDGREREZGXYDAjIiIi8hIMZkRERERegsGMiIiIyEswmBERERF5CQYzIiIiIi/BYEZERETkJRjMiIiIiLwEgxkRERGRl2AwIyIiIvISDGZEREREXoLBjIiIiMhLMJgREREReQkGMyIiIiIvwWBGRERE5CUYzIiIiIi8BIMZERERkZdgMCMiIiLyEgxmRERERF6CwYyIiIjISzCYEREREXkJBjMiIiIiL8FgRkREROQlGMyIiIiIvASDGREREZGXYDAjIiIi8hIMZkRERERewmPB7IUXXsCPf/xjTz09ERERkdfxSDA7evQoPvnkE088NREREZHXcnswa2trw0svvYRHH33U3U9NRERE5NXcHsyefvppPPnkk/Dz83P3UxMRERF5NZk7n+yDDz5AWFgYFi5ciI8//nhUj2Ew+Iz6+YOCfEd9Xxp/bB/vxzbyfmwj78b28X6ebiNBFEXRXU/24IMPorGxEVKpFO3t7ejp6cG6devw05/+dNiP0dzcBbt95CUHBfmisbFzxPcj92D7eD+2kfdjG3k3to/3c2UbSSTCqDqT3Npj9s9//rPv3x9//DFOnDgxolBGREREdDXjPmZEREREXsKtPWb9rV+/HuvXr/fU0xMRERF5HfaYEREREXkJBjMiIiIiL8FgRkREROQlGMyIiIiIvASDGREREZGXYDAjIiIi8hIMZkRERERegsGMiIiIyEswmBERERF5CQYzIiIiIi/BYEZERETkJRjMiIiIiLwEgxkRERGRl2AwIyIiIvISDGZEREREXoLBjIiIiMhLMJgREREReQkGMyIiIiIvwWBGRERE5CUYzIiIiIi8BINZP7nN+Xju+ItoNbV5uhQiIiKahBjM+lHL1AhRB8Im2jxdChEREU1CMk8X4E1i/afg2+n3e7oMIiIimqTYY9aPXbTjhZN/wq7y/Z4uhYiIiCYhBrN+JIIEYdoQ+Cl8PV0KERERTUIcyrzMfSl3eboEIiIimqTYY3aZnWV78Ovj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\n",
      "text/plain": [
       "<Figure size 720x720 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>RMSE</th>\n",
       "      <th>RMSE_upper</th>\n",
       "      <th>RMSE_lower</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max_leaf_nodes</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>11.0</th>\n",
       "      <td>4.85267</td>\n",
       "      <td>7.354009</td>\n",
       "      <td>2.351331</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   RMSE  RMSE_upper  RMSE_lower\n",
       "max_leaf_nodes                                 \n",
       "11.0            4.85267    7.354009    2.351331"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "tuning_param = 'max_leaf_nodes'\n",
    "cv_folds = 5\n",
    "columns=[tuning_param, 'RMSE', 'RMSE_upper', 'RMSE_lower']\n",
    "\n",
    "results = []\n",
    "for m in np.arange(2, 100):\n",
    "    reg = tree.DecisionTreeRegressor(max_leaf_nodes=m)\n",
    "    scores = cross_val_score(reg, X[train], y[train], cv=cv_folds, scoring='neg_mean_squared_error')\n",
    "    rmses = np.sqrt(np.absolute(scores))\n",
    "    rmse = np.mean(rmses)\n",
    "    conf_int = np.std(rmses) *2\n",
    "    results += [[m, rmse, rmse+conf_int, rmse-conf_int]]\n",
    "\n",
    "\n",
    "# Plot classification accuracy for each max_depth cv result\n",
    "plot_df = pd.DataFrame(np.asarray(results), columns=columns).set_index(tuning_param)\n",
    "plt.figure(figsize=(10,10))\n",
    "sns.lineplot(data=plot_df)\n",
    "plt.ylabel('RMSE')\n",
    "plt.show();\n",
    "\n",
    "# Choose model\n",
    "choice = plot_df[plot_df['RMSE'] == plot_df['RMSE'].min()]\n",
    "display(choice)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 468,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RMSE test: $4736\n"
     ]
    }
   ],
   "source": [
    "reg = tree.DecisionTreeRegressor(max_leaf_nodes=np.int(choice.index[0])).fit(X[train], y[train])\n",
    "y_hat = reg.predict(X[~train])\n",
    "\n",
    "rmse = np.sqrt(metrics.mean_squared_error(y[~train], y_hat))\n",
    "print('RMSE test: ${}'.format(np.int(rmse*1000)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 475,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "21200.0"
      ]
     },
     "execution_count": 475,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "boston_df['Price'].median()*1000"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "A test RMSE of 4.736 is achieved for the selected model, which suggest that this model can predict house prices to within \\$4,736 of the true median value of a house ($21200 in this dataset)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 8.3.3 Bagging and Random Forests\n",
    "\n",
    "### Bagging"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 530,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MSE test: 11.135\n",
      "RMSE test: 3.337\n"
     ]
    }
   ],
   "source": [
    "# Bagging with 100 trees\n",
    "# although I'm using RandomForestRegressor algo here this is Bagging because max_features = n_predictors\n",
    "\n",
    "max_features = X.shape[1]\n",
    "tree_count   = 100\n",
    "\n",
    "regr   = RandomForestRegressor(max_features=max_features, random_state=0, n_estimators=tree_count)\n",
    "regr.fit(X[train], y[train])\n",
    "y_hat = regr.predict(X[~train])\n",
    "\n",
    "mse = metrics.mean_squared_error(y[~train], y_hat)\n",
    "rmse = np.sqrt(mse)\n",
    "\n",
    "print('MSE test: {}'.format(np.around(mse, 3)))\n",
    "print('RMSE test: {}'.format(np.around(rmse, 3)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Bagging seems to yield a significant improvement in RMSE for the test set of $3337 (compared to $4736 for single optimal decision tree).\n",
    "\n",
    "### Random forest"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 528,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MSE test: 9.201\n",
      "RMSE test: 3.033\n"
     ]
    }
   ],
   "source": [
    "# Random Forest with 100 trees and 4 features considered at each split\n",
    "\n",
    "max_features = 4\n",
    "tree_count   = 100\n",
    "\n",
    "regr   = RandomForestRegressor(max_features=max_features, random_state=0, n_estimators=tree_count)\n",
    "regr.fit(X[train], y[train])\n",
    "y_hat = regr.predict(X[~train])\n",
    "\n",
    "mse = metrics.mean_squared_error(y[~train], y_hat)\n",
    "rmse = np.sqrt(mse)\n",
    "\n",
    "print('MSE test: {}'.format(np.around(mse, 3)))\n",
    "print('RMSE test: {}'.format(np.around(rmse, 3)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Random forest yields a further improvement over bagging with RMSE of $3,033 with 4 features considered at each split."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 529,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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cnJytHr1am3atEmrV69uqYy2lZyWo9LyKqtj4CuZ6UkqKamwOkabFhbWiTGwCcbCPhgL+2irY+Hn51BoaMiZ79fYBp9//rmGDBnifZ2UlKTKysozfiMAAAD4jtP6TmJtba33V78lJSVyu93NGgoAAADWavTXzTfeeKNuvfVWlZWVaeHChdq4caNuu+22lsgGAAAAizRaEq+//nr96Ec/0rZt21RfX6958+Y1mH4GAABA69NoSbz55pv1l7/8RVdeeWVL5AEAAIANNPqdxIqKClVXV7dEFgAAANhEo1cSO3TooOHDhysqKkodO3b0Ln/qqaeaNRgAAACs02hJvO6661oiBwAAAGyk0ZI4bty4lsgBAAAAG2m0JF5++eXeeyR+01tvvdUsgQAAAGC9Rkvihg0bvP+uq6vTxo0b1aFDh2YN5SsW3z/W6gj4hppal9URAABoNRotiRdeeGGD11OnTtX111+vW2+9tdlC+Yqyskq53d/56Gu0gLb6LE4AAJrTaT2W75sOHjyosrKy5sgCAAAAmzij7yR6PB65XC5Nnz692YMBAADAOmf0nUSHw6FzzjlHISEhzRoKAAAA1mp0unnu3Lm68MILdeGFF+qCCy5QSEiIJkyY0BLZAAAAYJFTXklMTk7Whx9+qE8++USJiYne5fX19QoMDGyRcAAAALDGKUvijBkz9J///EezZ8/W7Nmzvcv9/f0VGRnZIuEAAABgjVOWxG7duqlbt27asmWL/PwazkpXV1c3ezBfEBrKdzO/S02tSxXHa6yOAQAAvodGf7iSn5+vxYsXq7q6Wh6PR263W59//rnefvvtlshna8lpOSotr7I6hm1lpiepQpREAAB8UaMlMT09Xffcc4+ef/55TZ48Wa+88oqCg4NbIhsAAAAs0uivmzt06KD4+Hhddtllat++vR588EFt27atBaIBAADAKo2WxPbt26uurk7du3fXgQMH5Ofn5725NgAAAFqnRqebY2JidPvtt2v+/Pn6xS9+oX/961/q0qVLS2QDAACARRotiVOmTNGYMWN0/vnna9myZdq1a5cSEhJaIhsAAAAs0uh0syTt2bNHjz/+uHr27KnQ0FCFhoY2dy4AAABYqNGSuHz5cj3//PPasmWLampqlJGRoaVLl7ZENgAAAFik0ZK4ceNGPf300+rQoYO6dOmiF198URs2bGiJbAAAALBIoyUxICCgwbOazznnHAUENPpVRgAAAPiwRtveD37wA23btk0Oh0N1dXVauXKlLrzwwpbIdtref/99JSYmavHixRo1apR3+RtvvKGlS5eqpKREbrdbffr00e9//3tFRESoqKhIsbGx6tWrV4NjTZgwQUlJSS19CgAAALZyypL4xBNP6J577tHNN9+sjIwMvffee7rsssvUr18/PfbYYy2ZsVHr1q1TbGyssrKyvCXxzTffVEpKijIyMnTZZZdJklavXq277rpL69atkySFh4crNzfXstwAAAB2dcqSuGHDBt14442aN2+ennvuOVVXV8vhcKhDhw4tma9RLpdLeXl5Wr16tW644QYdPnxY3bt317Jly3TnnXd6C6IkJSUlqaamRnV1dRYmBgAAsL9TlsQhQ4boZz/7mTwejwYNGuRd7vF45HA4dODAgRYJ2JjXXntNF1xwgXr27KmRI0cqKytLKSkp2r17t2bOnGlsf+utt3r/XVxcLKfT2WB9enq6oqKimj03AACAnZ2yJKampio1NVVJSUlavXp1S2Y6I+vWrfPe3Ds+Pl7Tp0/X3XffLUnexwfW1dXp+uuvlyR98cUXWrRokcLDw5luBgAAOIVGf7hi54JYVlamgoIC7du3T88995w8Ho+OHz+ul19+WX379tVbb72liy66SIGBgd4yOGnSJLlcLouTAwAA2JtP38smNzdXAwcO1IoVK7zLlixZohdeeEF333237r33XvXu3Vv9+vWTJBUWFuqTTz6Rv7+/VZEBAAB8gk+XxJdeeknTpk1rsCwpKUkrVqxQly5d9Pjjj+uJJ55QaWmpqqur9YMf/EC/+93v1L9/fxUVFX3rdxKvvPJKzZo1qyVPAwAAwHZ8uiTm5eUZy7p27ap33nnH+/rPf/7zt+7brVs37d27t9myAQAA+LJGn7gCAACAtoeSCAAAAAMlEQAAAAZKIgAAAAyURAAAABgoiQAAADBQEgEAAGCgJAIAAMBASQQAAICBkggAAAADJREAAAAGn352s9UW3z/W6gi2VlPrsjoCAAD4niiJTVBWVim322N1DAAAgLOO6WYAAAAYKIkAAAAwUBIBAABgoCQCAADAQEkEAACAgZIIAAAAA7fAaYLQ0BCrI9hCTa1LFcdrrI4BAADOIkpiEySn5ai0vMrqGJbLTE9ShSiJAAC0Jkw3AwAAwEBJBAAAgIGSCAAAAAMlEQAAAAZKIgAAAAyURAAAABgoiQAAADBQEgEAAGCgJAIAAMDg8yUxNTVVTqdT8fHxio6OltPplNPp1Lp16yRJq1atUnR0tEpKSrz7HDx4UAMGDNDBgwe9y7Zs2aIJEybI5XK1+DkAAADYjc8/lm/u3LmSpKKiIt10003Kzc1tsD47O1sjRozQunXrNGXKFElSr169lJycrJSUFGVlZeno0aOaP3++nnvuObVr167FzwEAAMBufP5K4ncpLCzUF198ocmTJ+vFF1+U2+32rktKSlJoaKgyMjI0ffp0paSk6Ic//KHhElXRAAAa00lEQVSFaQEAAOyjVZfEdevWKTY2VtHR0QoICFBBQUGD9Y888ohWr16tHj16KD4+3qKUAAAA9tNqS6LL5VJeXp4SEhIkSXFxcXrhhRcabFNYWKigoCC99dZbqqystCImAACALfn8dxJP5dVXX1VFRYWmTp0q6cvSWFZWpk8//VQREREqLS3VAw88oGXLlumvf/2rHnroIT366KMWpwYAALCHVnslMTs7W3fffbfy8/OVn5+vgoICXXHFFVqzZo08Ho9mzJihG264QZdeeqlmz56tnTt3avPmzVbHBgAAsIVWWRJLS0u1c+dOXXfddQ2W/+pXv9KaNWv09NNPq6amRnfccYckqVOnTpo/f75SU1N17NgxKyIDAADYisPj8XisDuGrktNyVFpeZXUMy2WmJ6mkpMKy9w8L62Tp++P/MRb2wVjYB2NhH211LPz8HAoNDTnz/ZohCwAAAHwcJREAAAAGSiIAAAAMlEQAAAAYKIkAAAAwUBIBAABgoCQCAADAQEkEAACAgZIIAAAAAyURAAAABkoiAAAADAFWB/Bli+8fa3UEW6ipdVkdAQAAnGWUxCYoK6uU2+2xOgYAAMBZx3QzAAAADJREAAAAGCiJAAAAMFASAQAAYKAkAgAAwMCvm5sgNDTE6gjNoqbWpYrjNVbHAAAAFqIkNkFyWo5Ky6usjnHWZaYnqUKURAAA2jKmmwEAAGCgJAIAAMBASQQAAICBkggAAAADJREAAAAGSiIAAAAMlEQAAAAYKIkAAAAwUBIBAABgoCQCAADA0GYfy7dz505NmTJF3bt3l8fjkcvl0g033KCbb77Z6mgAAACWa7MlUZKio6O1atUqSVJlZaVGjx6tIUOGKDIy0uJkAAAA1mK6+Su1tbXy9/dXp06drI4CAABguTZ9JXHv3r1yOp1yu906fPiw4uLiFB4ebnUsAAAAy7XpK4nR0dHKzc1VXl6eXn/9dX300Udavny51bEAAAAs16ZL4jeFhIQoLi5Ob731ltVRAAAALEdJ/MrJkyf1z3/+UxdffLHVUQAAACzHdxKdTjkcDtXX1ysqKkqTJ0+2OhYAAIDl2mxJHDBggN5++22rYwAAANgS080AAAAwUBIBAABgoCQCAADAQEkEAACAgZIIAAAAAyURAAAABkoiAAAADJREAAAAGCiJAAAAMFASAQAAYKAkAgAAwNBmn918Niy+f6zVEZpFTa3L6ggAAMBilMQmKCurlNvtsToGAADAWcd0MwAAAAyURAAAABgoiQAAADBQEgEAAGCgJAIAAMDAr5ubIDQ0xLL3rql1qeJ4jWXvDwAAWjdKYhMkp+WotLzKkvfOTE9ShSiJAACgeTDdDAAAAAMlEQAAAAZKIgAAAAyURAAAABgoiQAAADBQEgEAAGCgJAIAAMBASQQAAICBkggAAAADJREAAAAG25fEyspKpaamKiEhQU6nU5MmTdK+fftUVFSkmJgYY/uoqKgGr/Pz8xUVFaW9e/c2WF5YWKibbrpJY8aM0ejRo/XAAw+ourq6Wc8FAADAV9i6JLrdbk2ePFnnnnuucnJylJubq7vuukuTJ0/W559/flrHyM7OVmxsrLKyshosnzZtmqZNm6b169crLy9PAQEBevLJJ5vjNAAAAHyOrUvizp07dfToUSUnJysgIECSNHDgQKWlpcntdje6/2effaYdO3YoJSVFmzdvVmVlpXddaWmpampqJEl+fn6aOnWq4uLimudEAAAAfEyA1QG+y/79+9W7d2/5+TXssldffbWKiopUXFwsp9N5yv3Xr1+vIUOGqFu3boqOjtb69es1ceJESdL999+vO++8U+Hh4RowYIBGjBihn/3sZ815OgAAAD7D1lcS/fz81L59+1OuDw8PV25uboP/vumll15SQkKCJCk+Pl4vvPCCd93Pf/5zbd++XSkpKQoICNDMmTP18MMPN8+JAAAA+Bhbl8To6Gjt379fHo+nwfJFixZp586d37nvvn379P777+vhhx9WTEyMli5dqg8++EC7d+/WRx99pKVLlyokJETXXHON5s6dq+eff15r1qxpztMBAADwGbYuif3791doaKgyMjJ08uRJSVJBQYGys7MVGRn5nftmZ2drwoQJ2rZtm/Lz8/Xaa6/J6XTqhRdeUNeuXfXcc8/pjTfe8G5/4MAB9enTp1nPBwAAwFfYuiQ6HA4tW7ZMhw8fVkJCghITE/X0009r+fLlCg0NPeV+dXV12rBhg/f7h1+75ZZbtHnzZnk8Hi1fvlxLly7ViBEjFBsbq7y8PC1atKi5TwkAAMAnODz/PZeL05aclqPS8ipL3jszPUklJRWWvLfdhIV14m9hE4yFfTAW9sFY2EdbHQs/P4dCQ0POfL9myAIAAAAfR0kEAACAgZIIAAAAAyURAAAABkoiAAAADJREAAAAGCiJAAAAMFASAQAAYKAkAgAAwEBJBAAAgCHA6gC+bPH9Yy1775pal2XvDQAAWj9KYhOUlVXK7ebR1wAAoPVhuhkAAAAGSiIAAAAMlEQAAAAYKIkAAAAwUBIBAABgoCQCAADAwC1wmiA0NKRZjltT61LF8ZpmOTYAAMDpoCQ2QXJajkrLq876cTPTk1QhSiIAALAO080AAAAwUBIBAABgoCQCAADAQEkEAACAgZIIAAAAAyURAAAABkoiAAAADJREAAAAGCiJAAAAMFASAQAAYPDZx/IVFRUpNjZWvXr1kiS53W5VVVVp7NixSk5OliS9//77SkxM1OLFizVq1CjvvpMmTdKnn36qjh076uTJkwoJCVFycrIGDx5sybkAAADYjc+WREkKDw9Xbm6u9/WxY8c0atQojR49Wr169dK6desUGxurrKysBiVRkh566CENGDBAkvTuu+/qtttu0+rVqxUZGdmi5wAAAGBHrWq6uaSkRB6PR8HBwXK5XMrLy9M999yjffv26fDhw6fcr2/fvoqLi9OaNWtaMC0AAIB9+fSVxOLiYjmdTtXW1qq8vFx9+/ZVRkaGIiIi9Morr+iCCy5Qz549NXLkSGVlZSklJeWUx7rooou0bdu2lgsPAABgYz59JfHr6eZNmzbJ6XTK4/FoyJAhkqR169YpISFBkhQfH6/s7GzV1dWd8lgOh0NBQUEtkhsAAMDufLokfs3Pz08zZszQsWPHtHLlSpWVlamgoEDPPPOMYmJiNGvWLB0/flwvv/zyKY/x3nvveX8EAwAA0Nb59HTzNwUEBGjGjBm6++67VV9fr4EDB2rFihXe9UuWLNELL7yg0aNHG/vu2bNHW7du1dq1a1syMgAAgG21mpIoScOGDdPll1+ul156STNnzmywLikpSStWrNDBgwclSbNmzVLHjh2908yPP/64unXrZkVsAAAA2/HZktitWzfl5+cby5955plv3b5r16565513JEmrVq1q1mwAAAC+rlV8JxEAAABnFyURAAAABkoiAAAADJREAAAAGCiJAAAAMFASAQAAYKAkAgAAwEBJBAAAgIGSCAAAAAMlEQAAAAaffSyfHSy+f2yzHLem1tUsxwUAADhdlMQmKCurlNvtsToGAADAWcd0MwAAAAyURAAAABgoiQAAADBQEgEAAGCgJAIAAMBASQQAAICBW+A0QWhoSKPb1NS6VHG8pgXSAAAAnD2UxCZITstRaXnVd26TmZ6kClESAQCAb2G6GQAAAAZKIgAAAAyURAAAABgoiQAAADBQEgEAAGCgJAIAAMBASQQAAICBkggAAAADJREAAAAGSiIAAAAMrbYkvvnmm3I6nQ3+69Onj5YtW6YBAwaotLTUu21RUZFiYmIsTAsAAGAvrbYk9u/fX7m5ud7/xo0bpx//+Mfq0qWLqqqqNHfuXKsjAgAA2FarLYnf9Oabb+qPf/yjlixZovbt22vUqFH6+OOPlZeXZ3U0AAAAW2r1JbGsrEz33nuvHnroIXXv3l2S1K5dO6WlpenRRx9tMO0MAACAL7Xqkuh2uzV9+nSNHj1a11xzTYN1ffv21fjx45l2BgAA+BatuiRmZGSorq5O991337eunzp1qj7++GNt2LChhZMBAADYW4DVAZrL66+/rjVr1mjdunUKCPj20wwMDFRaWpomTZqkrl27tnBCAAAA+2q1JfFPf/qTTp48qcmTJzdYfsMNNzR43bdvX9188838iAUAAOAbWm1JfO6550657sYbb2zwetq0aZo2bVpzRwIAAPAZrfo7iQAAAPh+KIkAAAAwUBIBAABgoCQCAADAQEkEAACAgZIIAAAAAyURAAAABkoiAAAADJREAAAAGCiJAAAAMLTax/K1hMX3j210m5paVwskAQAAOLsoiU1QVlYpt9tjdQwAAICzjulmAAAAGCiJAAAAMFASAQAAYKAkAgAAwEBJBAAAgIGSCAAAAAMlEQAAAAZKIgAAAAyURAAAABgoiQAAADBQEgEAAGCgJAIAAMBASQQAAICBkggAAAADJREAAAAGSiIAAAAMlEQAAAAYWrQkRkVFNbrNpEmTWiCJ6ZNPPtHvf/97S94bAADAbmx3JfGf//ynJe975MgRffLJJ5a8NwAAgN0EWPGmO3fu1J/+9CcFBQXp4MGDioqK0mOPPab09HRJ0vXXX681a9bo73//uxYvXqz6+np169ZN8+bNU5cuXRQTE6NLL71UBw4cUGZmpvLy8vT888/L399fw4cPV0pKikpLSzVnzhx9+umncjgcuu+++zR48GAtWbJER44c0cGDB1VeXq5f/OIXuu222/TQQw+pqKhIqampmjt3rhV/FgAAANuw7Eri22+/rTlz5mjz5s06cuSItm/frlmzZkmS1qxZo88++0wLFy7UypUrlZOTo6uuukqPPfaYd/9hw4Zp69at+s9//qPMzEytXbtW69ev1759+7R37149/PDDGj9+vLKzs/XHP/5Rc+bMUWVlpSRp7969+vOf/6zs7GxlZWVp3759mjVrlqKjoymIAAAAsuhKoiRddNFFioiIkCT16tVLX3zxRYP177zzjo4ePaqbbrpJkuR2u3Xuued61/fr10+StGvXLg0fPlydOnWSJD377LOSpH/84x86dOiQFi9eLEmqr6/3TicnJCQoODhYkhQTE6MdO3YoOjq6mc4UAADA91hWEtu3b+/9t8PhkMfjabD+5MmT+slPfqKnnnpKklRbW6uqqipj/4CAADkcDu/yY8eOqUOHDnK73frLX/6izp07S5KKi4sVGhqqV155Rf7+/t7t3W53g9cAAACw4Q9X/P39VV9fr379+mn37t368MMPJUnLli3zfmfxm/r376/XXntNVVVVqq+v13333ae9e/dq4MCByszMlCT9+9//VmJiok6cOCFJeuWVV1RXV6cvvvhCr776qq666irv+wIAAMDCK4mnMmLECDmdTmVnZ+uRRx7RPffcI7fbrfPPP18LFiwwtr/kkkv0y1/+UjfccIPcbreuueYaDR48WL169dKcOXOUmJgoSUpPT1dISIikL69CTpw4UZWVlbrjjjsUGRmp8vJyVVRUKCUl5VvfBwAAoC1xeP57nreVW7JkiSTpt7/9bZOPVVZWKbe7Tf35bCksrJNKSiqsjgExFnbCWNgHY2EfbXUs/PwcCg0NOfP9miELAAAAfJztppub29m4gggAANDacSURAAAABkoiAAAADJREAAAAGCiJAAAAMFASAQAA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\n",
      "text/plain": [
       "<Figure size 720x720 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot feature by importance in this model\n",
    "\n",
    "plot_df = pd.DataFrame({'feature': X.design_info.column_names, 'importance': regr.feature_importances_})\n",
    "\n",
    "plt.figure(figsize=(10,10))\n",
    "sns.barplot(x='importance', y='feature', data=plot_df.sort_values('importance', ascending=False),\n",
    "            color='b')\n",
    "plt.xticks(rotation=90);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**ISL author:** \n",
    "The results indicate that across all of the trees considered in the random forest, the wealth level of the community (lstat) and the house size (rm) are by far the two most important variables."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 8.3.4 Boosting"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 547,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MSE test: 10.654\n",
      "RMSE test: 3.264\n"
     ]
    }
   ],
   "source": [
    "# Gradient boosting\n",
    "\n",
    "max_features = 'auto'\n",
    "l            = 0.1\n",
    "tree_count   = 100\n",
    "\n",
    "\n",
    "regr   = GradientBoostingRegressor(max_features=max_features, \n",
    "                                   random_state=1, \n",
    "                                   n_estimators=tree_count,\n",
    "                                   learning_rate=l)\n",
    "regr.fit(X[train], y[train])\n",
    "y_hat = regr.predict(X[~train])\n",
    "\n",
    "mse = metrics.mean_squared_error(y[~train], y_hat)\n",
    "rmse = np.sqrt(mse)\n",
    "\n",
    "print('MSE test: {}'.format(np.around(mse, 3)))\n",
    "print('RMSE test: {}'.format(np.around(rmse, 3)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 577,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MSE test: 8.11\n",
      "RMSE test: 2.848\n"
     ]
    }
   ],
   "source": [
    "# Gradient boosting\n",
    "\n",
    "max_features  = 4\n",
    "learning_rate = 0.1\n",
    "tree_count    = 100\n",
    "\n",
    "\n",
    "regr   = GradientBoostingRegressor(max_features=max_features, \n",
    "                                   random_state=1, \n",
    "                                   n_estimators=tree_count,\n",
    "                                   learning_rate=learning_rate)\n",
    "regr.fit(X[train], y[train])\n",
    "y_hat = regr.predict(X[~train])\n",
    "\n",
    "mse = metrics.mean_squared_error(y[~train], y_hat)\n",
    "rmse = np.sqrt(mse)\n",
    "\n",
    "print('MSE test: {}'.format(np.around(mse, 3)))\n",
    "print('RMSE test: {}'.format(np.around(rmse, 3)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "With max_features set to auto all features are used, I assume we describe this as 'bagging with boosting'. This yields an RMSE of 3.264 a slight improvement over bagging 3.337.\n",
    "\n",
    "Setting max_features to 4 gives the best RMSE so far at 2.848 which is almost have the error observed for a single tree regression.\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Off-piste\n",
    "\n",
    "A few experiments not part of ISL lab that I wanted to do out of interest.\n",
    "\n",
    "### Comparison with Lasso\n",
    "\n",
    "The lasso was one of the most reliable models introduced in ch6. How does the lasso compare with the results above?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 596,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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TpwYqXJDxl/f48aNw/Hjx3H48GEACOomYrEmLPuykC5vR4GdO3eKm2++WeTk5IiKigohhBD33HOP+OKLL4QQQjQ0NIj8/Hwxa9Ys8cgjj4je3t5Ilhsyvvqura0VmZmZIjc31/Xf6tWrI1zx8Pn7XTt9++23cXG0khD+e/78889Ffn6+mD17trjrrrvEyZMnI1luyPjre+/evWLu3Llizpw54o477hBHjhyJZLkhNWPGDNfRSuHcl/FmP0REpBFX00pERBQaDAciItJgOBARkQbDgYiINBgORESkwXAgGqZ9+/Zh9uzZkS6DKKQYDkRarTMmAAAA50lEQVTDdM011+DMmTM4cOBApEshChmGA9EwSZKEK664Am+++WakSyEKmYRIF0AU69rb27F//36oqoq2tjaMHj060iURDRvPkCYapsrKSnz55ZcAgEmTJmH58uWRLYgoBDitRDRMb775JhYuXIhbb70V27dvj3Q5RCHBaSWiYfjkk08ghMDUqVMhhIDD4cCBAwe83qSFKFZw5EA0DNu2bcNtt90GoH9hesGCBdi2bVuEqyIaPq45EBGRBkcORESkwXAgIiINhgMREWkwHIiISIPhQEREGgwHIiLSYDgQEZEGw4GIiDT+H3xHH7Nrj/MHAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RMSE Train CV: 6.194201937281284\n",
      "@Lambda: 0.36099999999999993\n",
      "MSE test: 24.655\n",
      "RMSE test: 4.965\n"
     ]
    }
   ],
   "source": [
    "def lasso_cv(X, y, λ, k):\n",
    "    \"\"\"Perform the lasso with \n",
    "    k-fold cross validation to return mean MSE scores for each fold\"\"\"\n",
    "    # Split dataset into k-folds\n",
    "    # Note: np.array_split doesn't raise excpetion is folds are unequal in size\n",
    "    X_folds = np.array_split(X, k)\n",
    "    y_folds = np.array_split(y, k)\n",
    "    \n",
    "    MSEs = []\n",
    "    for f in np.arange(len(X_folds)):\n",
    "        # Create training and test sets\n",
    "        X_test  = X_folds[f]\n",
    "        y_test  = y_folds[f]\n",
    "        X_train = X.drop(X_folds[f].index)\n",
    "        y_train = y.drop(y_folds[f].index)\n",
    "        \n",
    "        # Fit model\n",
    "        model = Lasso(alpha=λ, copy_X=True, fit_intercept=False, max_iter=10000,\n",
    "                      normalize=True, positive=False, precompute=False, random_state=0,\n",
    "                      selection='cyclic', tol=0.0001, warm_start=False).fit(X_train, y_train)\n",
    "        \n",
    "        # Measure MSE\n",
    "        y_hat = model.predict(X_test)\n",
    "        #print(y_test)\n",
    "        MSEs += [metrics.mean_squared_error(y_test, y_hat)]\n",
    "    return MSEs\n",
    "\n",
    "X_train = pd.DataFrame(X[train], columns=X.design_info.column_names)\n",
    "y_train = pd.DataFrame(y[train], columns=['Price'])\n",
    "\n",
    "lambdas = np.arange(.001, 1, .01)\n",
    "MSEs    = [] \n",
    "for l in lambdas:\n",
    "    MSEs += [np.mean(lasso_cv(X_train, y_train, λ=l, k=5))]\n",
    "\n",
    "sns.scatterplot(x='λ', y='MSE', data=pd.DataFrame({'λ': lambdas, 'MSE': MSEs}))\n",
    "plt.show();\n",
    "\n",
    "# Choose model\n",
    "lamb = min(zip(MSEs, lambdas))\n",
    "print('RMSE Train CV: {}\\n@Lambda: {}'.format(np.sqrt(lamb[0]), lamb[1]))\n",
    "\n",
    "\n",
    "# Use chosen model on test set prediction\n",
    "model = Lasso(alpha=lamb[1], copy_X=True, fit_intercept=False, max_iter=10000,\n",
    "              normalize=True, positive=False, precompute=False, random_state=0,\n",
    "              selection='cyclic', tol=0.0001, warm_start=False).fit(X[train], y[train])\n",
    "\n",
    "y_hat = model.predict(X[~train])\n",
    "\n",
    "mse = metrics.mean_squared_error(y[~train], y_hat)\n",
    "rmse = np.sqrt(mse)\n",
    "\n",
    "print('MSE test: {}'.format(np.around(mse, 3)))\n",
    "print('RMSE test: {}'.format(np.around(rmse, 3)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The lasso yields an RMSE of 4.965 which is similar to the optimal single tree found above (4.736). In this setting Bagging, Random Forest and Boosting outperform the lasso with boosting yielding an RMSE of 2.848."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 606,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAokAAAJVCAYAAACyK291AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3Xl0VPX9//HXJCEEklQgJqBSKCV8AxpEWpRNUIJKVkYFKUvjChYLRlFBtCxGRVkElITYoljFgoZAJITFNaKBCnWpUBAsX9BihGYjYMKWSeb+/vDr/Ew/0EAwuTPJ83EO55h7586876ec+vTeyYzDsixLAAAAwI/42T0AAAAAvA+RCAAAAAORCAAAAAORCAAAAAORCAAAAAORCAAAAAORCAAAAAORCAAAAAORCAAAAAORCAAAAAORCAAAAAORCAAAAAORCAAAAEOA3QP4srKyY3K7rVofFxYWotLSigaYqHFi/eqOtTs/rF/dsXbnh/WrO9bO5OfnUOvWwed8HJF4Htxu66wi8YfHou5Yv7pj7c4P61d3rN35Yf3qjrX7aXC7GQAAAAYiEQAAAAYiEQAAAAYiEQAAAAYiEQAAAAYiEQAAAAYiEQAAAAYiEQAAAAYiEQAAAAYiEQAAAAYiEQAAAAYiEQAAAAYiEQAAAIYGjcSoqKhaH5OcnNwAk5i++eYbPfroo7a8NgAAgLfxuiuJf/vb32x53YMHD+qbb76x5bUBAAC8TYAdL7pt2zb96U9/UlBQkPbt26eoqCg988wzmjt3riTplltuUVZWlj788EMtWrRIVVVVat++vZ544gm1bt1aMTExuvzyy7V7926tWLFCubm5eu211+Tv769BgwZp8uTJKikp0YwZM/Tvf/9bDodDDz74oPr166e0tDQdPHhQ+/btU1lZmX7zm99o7NixevLJJ1VQUKDU1FTNnDnTjmUBAADwGrZdSfz73/+uGTNmaOPGjTp48KA2b96sadOmSZKysrJ0+PBhzZ8/X0uXLtWaNWt09dVX65lnnvEcP3DgQL311lv69ttvtWLFCq1atUpr167Vrl27tHPnTs2aNUvDhg1Tdna2nn/+ec2YMUMVFRWSpJ07d+rPf/6zsrOzlZmZqV27dmnatGmKjo4mEAEAAGTTlURJ6tKli9q1aydJ6ty5s44ePVpj//bt23Xo0CHdeuutkiS3260LLrjAs79Hjx6SpI8//liDBg1SaGioJOnll1+WJP31r3/V/v37tWjRIklSVVWV53ZyYmKigoODJUkxMTHaunWroqOj6+lMAQAAfI9tkdi8eXPPPzscDlmWVWN/dXW1fvWrX+mPf/yjJOnUqVM6duyYcXxAQIAcDodne2FhoVq0aCG3261XXnlFrVq1kiQVFRUpLCxM7777rvz9/T2Pd7vdNX4GAACAF/7iir+/v6qqqtSjRw99/vnn+uqrryRJGRkZnvcs/livXr30wQcf6NixY6qqqtKDDz6onTt3qk+fPlqxYoUk6X//93+VlJSkEydOSJLeffddVVZW6ujRo3r//fd19dVXe14XAAAANl5JPJPBgwfL6XQqOztbTz31lO6//3653W61bdtW8+bNMx5/2WWX6be//a1Gjhwpt9ut66+/Xv369VPnzp01Y8YMJSUlSZLmzp2rkJAQSd9fhRw9erQqKir0u9/9TpGRkSorK1N5ebkmT5582tcBAABoShzWf97nbeTS0tIkSffee+95P1dpaYXc7tqXLzw8VMXF5ef9ek0V61d3rN35Yf3qjrU7P6xf3bF2Jj8/h8LCQs79uHqYBQAAAD7O624317ef4goiAABAY8eVRAAAABiIRAAAABiIRAAAABiIRAAAABiIRAAAABiIRAAAABiIRAAAABiIRAAAABiIRAAAABiIRAAAABiIRAAAABiIRAAAABiIRAAAABiIRAAAABiIRAAAABgC7B4AaHNBc/kHBp5xv1XlasBpAACARCTCC/gHBurbxRPOuP+SCYslnWy4gQAAALebAQAAYCISAQAAYCASAQAAYCASAQAAYCASAQAAYCASAQAAYCASAQAAYCASAQAAYCASAQAAYCASAQAAYPCZSKyoqFBqaqoSExPldDqVnJysXbt2qaCgQNHR0XI6nXI6nUpKSlJMTIwWLVrkOTYqKkqSVFBQoKioKM2YMaPGc+/evVtRUVHKzs5u0HMCAADwVj7x3c1ut1vjxo1T7969tWbNGgUEBGjr1q0aN26clixZooiICOXk5HgeX1hYqCFDhighIUGdO3eu8VytWrVSfn6+qqur5e/vL0nasGGD2rRp06DnBAAA4M184kritm3bdOjQIaWkpCgg4Puu7dOnj55++mm53W7j8cXFxbIsS8HBwca+4OBgdevWTR9//LFn25YtW9SvX7/6OwEAAAAf4xNXEr/44gt17dpVfn41m/aaa65RQUGBioqK5HQ6derUKZWVlal79+5KT09Xu3btTvt8cXFxeuutt9SnTx/t2LFDUVFRsiyrIU4FAADAJ/jElUQ/Pz81b978jPt/uN28YcMGOZ1OWZal/v37n/HxMTEx+vDDD+V2u7Vx40bFxcXVx9gAAAA+yyciMTo6Wl988YVxtW/BggXatm2b52c/Pz9NmTJFhYWFWrp06RmfLzg4WF27dtWnn36qrVu3cqsZAADgP/hEJPbq1UthYWFKT09XdXW1JCk/P1/Z2dmKjIys8diAgABNmTJFGRkZKi4uPuNzxsXFaf78+YqOjva8zxEAAADf84lIdDgcysjI0IEDB5SYmKikpCS98MILWrJkicLCwozHDxw4UD179tRzzz13xuccNGiQdu/erfj4+PocHQAAwCc5LH5jo85KSyvkdte+fOHhoSouLm+AiXxTeHiovl084Yz7L5mwmPWrI/7unR/Wr+5Yu/PD+tUda2fy83MoLCzk3I+rh1kAAADg44hEAAAAGIhEAAAAGIhEAAAAGIhEAAAAGIhEAAAAGIhEAAAAGIhEAAAAGIhEAAAAGIhEAAAAGALsHgCorqzUJRMWn3G/VeVqwGkAAIBEJMILHD56StKpM+4PDw+VdLLB5gEAANxuBgAAwGkQiQAAADAQiQAAADAQiQAAADAQiQAAADAQiQAAADDwETjweu6qyv/7GBypqvKUyo5W2jwRAACNH5EIr+cXEKj8FxIlSQPGrZNEJAIAUN+43QwAAAADkQgAAAADkQgAAAADkQgAAAADkQgAAAADkQgAAAADkQgAAAADkQgAAAADkQgAAAADkQgAAABDo43ETz75RE6ns8afbt26KSMjQ71791ZJSYnnsQUFBYqJibFxWgAAAO/SaCOxV69eysnJ8fy56aab9D//8z9q3bq1jh07ppkzZ9o9IgAAgNdqtJH4Y5988omef/55paWlqXnz5hoyZIj+9a9/KTc31+7RAAAAvFKjj8TS0lI98MADevLJJ9WhQwdJUrNmzfT0009r9uzZNW47AwAA4HuNOhLdbrceeughJSQk6Prrr6+xr3v37ho2bBi3nQEAAE6jUUdienq6Kisr9eCDD552/8SJE/Wvf/1L69ata+DJAAAAvFuA3QPU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Vi8DAQAAwH61RuK6des8/1xZWan169erRYsW9ToU8GOV1VVaf/P9do8BAEC9OOly2T3CadX63c2nc8sttygrK6s+5vEpfHdzw2D96o61Oz+sX92xdueH9as71s5Ub9/d/J/27dun0tLSc34hAAAA+I5zek+iZVlyuVx66KGH6n0wAAAA2Oec3pPocDj0s5/9TCEh537JEgAAAL6j1tvNM2fO1CWXXKJLLrlEF198sUJCQjRixIiGmA0AAAA2OeOVxJSUFH311Vf65ptvlJSU5NleVVWlwMDABhkOAAAA9jhjJE6ZMkXffvutpk+frunTp3u2+/v7KzIyskGGA0JbBamyutruMQAAaHLOGInt27dX+/bt9eabb8rPr+Zd6ePHj9f7YIAkBTVrZvcIAAA0SbX+4kpeXp4WLVqk48ePy7Isud1uHTlyRH//+98bYj4AAADYoNZInDt3ru6//3699tprGjdunN59910FBwc3xGwAAACwSa2/3dyiRQvFx8friiuuUPPmzfXYY49p06ZNDTAaAAAA7FJrJDZv3lyVlZXq0KGDdu/eLT8/P8+HawMAAKBxqvV2c0xMjO6++27NmTNHv/nNb/Tpp5+qdevWDTEbAAAAbFJrJI4fP15Dhw5V27ZtlZGRoY8//liJiYkNMRsAAABsUuvtZknasWOHFi5cqE6dOiksLExhYWH1PRcAAABsVGskLlmyRK+99prefPNNnTx5Uunp6Vq8eHFDzAYAAACb1BqJ69ev1wsvvKAWLVqodevWWrlypdatW9cQswEAAMAmtUZiQEBAje9q/tnPfqaAgFrfyggAAAAfVmvtXXTRRdq0aZMcDocqKyu1dOlSXXLJJQ0x21n75z//qaSkJC1atEhDhgzxbP/oo4+0ePFiFRcXy+12q1u3bnr00UfVrl07FRQUKDY2Vp07d67xXCNGjNCYMWMa+hQAAAC8yhkj8dlnn9X999+v2267Tenp6fryyy91xRVXqEePHnrmmWcacsZarV69WrGxscrMzPRE4ieffKLJkycrPT1dV1xxhSRp+fLlmjBhglavXi1JioiIUE5Ojm1zAwAAeKszRuK6des0atQoPfHEE1q2bJmOHz8uh8OhFi1aNOR8tXK5XMrNzdXy5cs1cuRIHThwQB06dFBGRobuueceTyBK0pgxY3Ty5ElVVlbaODEAAID3O2Mk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6dZbb5XL5dLw4cN1+eWX2z0WmoClS5fq1KlTmj17tmfbyJEjNWrUKBun8h3XXHONduzYoRtvvFH+/v664YYbiG00iEGDBmn79u268cYb5Xa7NXr0aPXs2dPusXyaw7Isy+4hAAAA4F243QwAAAADkQgAAAADkQgAAAADkQgAAAADkQgAAAADH4EDAGehurpay5YtU25urqqrq+VyuTRo0CDdd999CgwMrNNzzpw5U/n5+UpKStKVV16p6dOnKywsTDfffLMqKip09913n/HYcePG6eGHH1ZkZGSdXjsrK0uVlZUaM2ZMnY4H0PjxETgAcBamT5+uo0ePatasWQoNDdXx48f10EMPKTg4WPPmzavTc3bt2lWbNm1Su3bt9Mgjj+jnP/+5fv/73//Ek5/e1KlT1aVLF911110N8noAfA9XEgGgFgUFBcrNzdXmzZsVEhIiSWrZsqVSU1P12Wefqby8XKmpqdqzZ48cDocGDBigBx54QAEBAdq3b59mzZqlI0eOqLq6WsnJyRo+fLhGjx4ty7I0btw4xcbG6r333lPz5s1VXl6uli1bqqysTDNmzNBXX32lGTNm6PDhw/Lz89M999yj+Ph4xcTE6LnnnlP37t2Vl5en559/Xi6XS0FBQXr44YfVs2dPpaWl6dtvv1VxcbG+/fZbtW3bVvPmzdP27duVl5enLVu2KCgoiKuJAE6LSASAWuzatUuRkZGeQPxBeHi4hgwZoocfflitWrVSbm6uXC6X7rnnHr300ku68847lZKSorlz5+qyyy5TeXm5fvOb3ygyMlIrVqxQVFSUXnnlFbVp00bffPON58peWlqa5zUeeOABDR8+XGPGjNGhQ4eUnJxc4ysqv/76ay1cuFDLli1T69attXfvXt1xxx16++23JX3/fbZr1qxRSEiIxo8fr9dff10pKSl677331KVLFwIRwBkRiQBQCz8/P7nd7jPu//DDD/Xaa6/J4XAoMDBQI0eO1CuvvKKYmBgdOHCgxvfvnjx5Ul988YWuuOKKWl/3yJEj2rNnj2655RZJ0kUXXaR33323xmO2bNmioqIi3X777Z5tDodDBw4ckCRdddVVnri99NJLdfTo0bM+bwBNG5EIALW4/PLLtX//flVUVNS4mlhYWKjp06fL7XbL4XB4trvdblVVVam6ulqhoaHKycnx7CspKVFoaOhZvW5AwPf/F/3j596/f78uvvjiGq/Vt29fPfvss55thw4dUkREhN555x0FBQV5tjscDvE2dABni4/AAYBatG3bVklJSXr00UdVUVEhSaqoqNBjjz2mVq1a6eqrr9Zf/vIXWZalyspKrVy5Uv369VOnTp0UFBTkicRDhw4pMTFRO3fuPKvXDQkJ0WWXXaY1a9Z4jh81apTKy8s9j+nbt6+2bNmiffv2SZI++OADDR06VCdPnvyvz+3v76+qqqpzXgsATQdXEgHgLMycOVMZGRkaOXKk/P39VVlZqeuuu0733nuvjh07pieffFJJSUlyuVwaMGCAxo8fr8DAQGVkZGjWrFl68cUXVVVVpfvuu0+//vWvz/p158+fr9TUVL366qtyOByaNWuWwsPDPfsjIyP1+OOP64EHHpBlWQoICNDzzz+v4ODg//q8AwcO1OzZs6X/184dkwAAxEAQjNv4d/ACtkv5zEhItXCQmdnd21GAr3mBAwBAmJsBAAiRCABAiEQAAEIkAgAQIhEAgBCJAACESAQAIEQiAADxAMFP8vmKS85QAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 720x720 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# How does Lasso weight feature importance compared to tree-based methods?\n",
    "plt.figure(figsize=(10,10))\n",
    "sns.barplot(x='Coefficient', y='feature', data=pd.DataFrame({'feature': X.design_info.column_names, 'Coefficient': model.coef_}));"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We saw that tree-base methods ranked affluence of the community and house size (LSTAT, RM respectively) as the most important features when predicting slae price. \n",
    "\n",
    "Similarly the Lasso places a high weight on house size but does not consider LSTAT as strongly."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Todo: It would be nice to try XgBoost for comparison here too"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
